Многопоточность, блокировка одной записи в Boost

Я пытаюсь реализовать следующий код в многопоточном сценарии:

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 полезно в этой ситуации (любой читатель может стать писателем), или есть какой-то другой способ добиться этого?

12
задан skaffman 3 May 2011 в 13:44
поделиться