Re[2]: Синхронизация нескольких потоков
От: _spin_ Россия  
Дата: 02.11.05 17:29
Оценка:
Здравствуйте, Softwarer, Вы писали:

S>Здравствуйте, _spin_, Вы писали:


S>Наибольший интерес вызывает последний этап — "после чего ОП вновь захватывает мьютекс". Интересно, как он узнает что уже наступило "после чего".

Ещё не знаю.

S>Я бы сказал, это задача на событие + оповещение нескольких подписчиков. Вариантов решения можно назвать много, и api-шными средствами и дополнительными. Например, через TEvent. Я бы, возможно, сделал так:

Возможно и через TEvent, надо подумать.

S>- используется TMultiReadExclusiveWriteSynchronizer, в который обернуты нужные данные и некоторое поле "версия данных".

S>- при изменении структуры ОП захватывает данные в монопольном режиме, модифицирует и увеличивает номер версии.
S>- другие потоки хватают данные в shared режиме, проверяют номер версии, и если нужно, модифицируют свои внутренние структуры.
TMultiReadExclusiveWriteSynchronizer — можно поподробнее что это и с чем его есть положено ? А лучше на промере.

S>Вообще, пункт "другие потоки синхронизируют структуру" выглядит чуть подозрительным — может быть, им правильнее читать одну копию?

У каждого потока — своя копия, которя является частью общей структуры каталогов.

S>И в любом случае — продумайте, что должно происходить, если во время "другой поток синхронизирует" структура меняется повторно.

Всё повторяется, т.к. изменения в каталоге будут считаны после синхронизации (ReadDirectoryChanges) и если изменения есть — новая синхронизация.
... <<#1 — 09 Pimple Jackson Hey you>>
Не восхрапи на работе, ибо храпом своим разбудишь начальника своего.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.