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