|
| |||
|
|
Програмистс-с-сткое Вот как можно оттестировать какой-нидь fair(справедливый, типа) read write lock, написанный тобою же год назад? Известно как - запускаю сотню тредов и они по датчику случайных чисел начинают локать - либо на чтение, либо на запись. После чего в полном офигее наблюдаю, как треды резво оккупируют read lock, ну а потом, стоит хоть одному дорваться до write-locka, как вслед за ним write lock получает еще десяток тредов один за другим. Каждый желающий войти во write-lock проходит один за другим. Строем. Но они же не могут!!! Ладушки. Попробую по-другому. Распределим роли заранее, в соответствии с тем же датчиком случайных чисел, в начале работы тред решит, будет ли он хватать read lock или write lock. Запускаем. Хренак! Ни один тред вообще не заходит во write-lock. И даже не пытается. Все как один хотят читать. Финита ля-комедия. Генератор случайных чисел в каждом треде работает независимо и выдает одну и ту же последовательность псевдослучайных чисел. Эти сволочи попросту более-менее одновременно ломились на write lock. Вся сотня тредов. А в чем же главная ошибка? Пожалуй, в том, что я не сохранил тесты годовой давности вместе с имплементацией лока. |
||||||||||||||