У меня есть данные в сочетании с Lock = boost::shared_mutex
,
я блокировка доступа к данным с
блокировка считывателя ReadLock = boost::shared_lock<Lock>
а также писатель замки WriteLock = boost::unique_lock<Lock>
,
Очевидно, что многие читатели могут читать данные одновременно, и только один пишет на них. Но вот подвох:
Один поток может иметь многократные замки на том же мьютексе, потому что это вызывает функции, которые сами блокируют данные (с ReadLock
). Но, как я обнаружил, это вызывает блокировку:
Теперь я получаю блокировку, потому что Lock2
ждет LockW
выходить, LockW
ждет Lock1
, а такжеLock1
застрял из-за Lock2
,
Я не знаю, возможно ли изменить дизайн так, чтобы каждый поток делал только один ReadLock
, Я считаю, что имея систему, которая Писатели голодают решил бы мои проблемы. Есть ли общий Кстати, как справиться с моим делом?
Задача ещё не решена.
Других решений пока нет …