Я работал над обратным шаблоном работника/потребителя. Между этими 4 методами я буду выполнять операции записи/чтения.
...
void beginWrite();
void endWrite();
void beginRead();
void endRead();
...
Я знаю только для общего/уникального замка. Итак, как это делается вручную через общий/уникальный замок? Поэтому я бы заблокировал общий доступ в beginRead и выпустил в endRead. Или заблокировать/освободить в другой поток уникальный замок?
У Boost shared locks есть функции, которые отлично соответствуют перечисленным вами функциям. Они lock
(получают эксклюзивную блокировку), unlock
(освобождают эксклюзивную блокировку), lock_shared
(получают общую блокировку) и unlock_shared
(деблокируют разделяемую блокировку).
boost::shared_mutex
?