Я пытаюсь реализовать следующий код в многопоточном сценарии:
Get shared access to mutex
Read data structure
If necessary:
Get exclusive access to mutex
Update data structure
Release exclusive lock
Release shared lock
Boost Threads имеет класс shared_mutex
, который был разработан для модель с несколькими читателями и одним писателем. Относительно этого класса есть несколько вопросов о stackoverflow. Однако я не уверен, что это соответствует сценарию выше, когда любой читатель может стать писателем. В документации говорится:
Концепция UpgradeLockable - это доработка SharedLockable концепция, позволяющая обновлять владение, а также совместное владение и исключительное право собственности. Это расширение для мульти-ридера / модель с одной записью, предоставленная Концепция SharedLockable: сингл поток может иметь обновляемое право собственности в то же время, когда другие поделились владение.
Судя по слову «одиночный», я подозреваю, что только один поток может содержать обновляемую блокировку. Остальные имеют только общую блокировку, которую нельзя обновить до эксклюзивной блокировки.
Знаете ли вы, что boost :: shared_lock
полезно в этой ситуации (любой читатель может стать писателем), или есть какой-то другой способ добиться этого?