Re: Синхронизация нескольких потоков
От: Softwarer http://softwarer.ru
Дата: 02.11.05 17:06
Оценка:
Здравствуйте, _spin_, Вы писали:

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

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

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

— при изменении структуры ОП захватывает данные в монопольном режиме, модифицирует и увеличивает номер версии.

— другие потоки хватают данные в shared режиме, проверяют номер версии, и если нужно, модифицируют свои внутренние структуры.

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

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