Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет yigal_s ([info]yigal_s)
@ 2004-06-17 22:47:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Програмистс-с-сткое
Вот как можно оттестировать какой-нидь fair(справедливый, типа) read write lock, написанный тобою же год назад?

Известно как - запускаю сотню тредов и они по датчику случайных чисел начинают локать - либо на чтение, либо на запись.

После чего в полном офигее наблюдаю, как треды резво оккупируют read lock, ну а потом, стоит хоть одному дорваться до write-locka, как вслед за ним write lock получает еще десяток тредов один за другим.

Каждый желающий войти во write-lock проходит один за другим. Строем. Но они же не могут!!!

Ладушки. Попробую по-другому. Распределим роли заранее, в соответствии с тем же датчиком случайных чисел, в начале работы тред решит, будет ли он хватать read lock или write lock. Запускаем. Хренак! Ни один тред вообще не заходит во write-lock. И даже не пытается. Все как один хотят читать.

Финита ля-комедия. Генератор случайных чисел в каждом треде работает независимо и выдает одну и ту же последовательность псевдослучайных чисел. Эти сволочи попросту более-менее одновременно ломились на write lock. Вся сотня тредов.

А в чем же главная ошибка? Пожалуй, в том, что я не сохранил тесты годовой давности вместе с имплементацией лока.