Такое обновление обычно не легкое. Рассмотрим два потока чтения, пытающихся обновиться одновременно. Это было бы тупиком.
Одно из решений состоит в том, чтобы сделать один (и не более одного) читателей обновляемыми с самого начала, а другие - нет. boost::upgrade_mutex
является примером. Другое может заключаться в том, что обновление может завершиться неудачей, и в этом случае для обновления требуется снять блокировку считывателя без повторных попыток. Все это не намного лучше, чем просто разблокировать и заново получить блокировку писателя.
Я считаю, что большую часть времени вас не волнует возвращаемое значение BeginWrite
. Большинство других реализаций общего мьютекса не возвращают это значение.
(Я полагаю, что вопрос помечен WinAPI неправильно. Существует Блокировка SRW , но она отличается от TMREWSyn c)