Для того, щоб додати ще емпіричну інформацію, я досліджував всю проблему блоків, що можна оновити , та приклад для підвищення shared_mutex (кілька читань / один запис)? є гарною відповіддю, додаючи важливу інформацію про те, що лише один потік може мати оновлення_блоку, навіть якщо він не оновлений, що важливо, оскільки це означає, що ви не можете оновити зі спільного блокування до унікального блокування, не звільняючи спочатку загальний замок. (Це обговорювалося в іншому місці, але найцікавіша тема тут http://thread.gmane.org/gmane.comp.lib.boost.devel/214394 )
Однак я виявив важливу (незадокументовану) різницю між потоком, який чекає оновлення до блокування (тобто потрібно чекати, коли всі читачі вийдуть із загального блокування), і записом запису, який очікує тієї самої речі (тобто унікальний_блок).
Нитка, яка чекає унікального_блока на shared_mutex, блокує будь-які нові читачі, що надходять, їм доведеться чекати запиту авторів. Це гарантує, що читачі не голодують письменниками (однак, я вважаю, що письменники могли голодувати читачами).
Потік, який чекає на оновлення_lockable, дозволяє іншим потокам отримати загальний замок, тому ця нитка може бути голодованою, якщо читачі дуже часті.
Це важливе питання, яке слід врахувати, і, ймовірно, має бути задокументовано.