Наибольший интерес вызывает последний этап — "после чего ОП вновь захватывает мьютекс". Интересно, как он узнает что уже наступило "после чего".
Я бы сказал, это задача на событие + оповещение нескольких подписчиков. Вариантов решения можно назвать много, и api-шными средствами и дополнительными. Например, через TEvent. Я бы, возможно, сделал так:
— используется TMultiReadExclusiveWriteSynchronizer, в который обернуты нужные данные и некоторое поле "версия данных".
— при изменении структуры ОП захватывает данные в монопольном режиме, модифицирует и увеличивает номер версии.
— другие потоки хватают данные в shared режиме, проверяют номер версии, и если нужно, модифицируют свои внутренние структуры.
Вообще, пункт "другие потоки синхронизируют структуру" выглядит чуть подозрительным — может быть, им правильнее читать одну копию?
И в любом случае — продумайте, что должно происходить, если во время "другой поток синхронизирует" структура меняется повторно.