Наличие нескольких блокировок считывателя в одном потоке

У меня есть данные в сочетании с Lock = boost::shared_mutex,
я блокировка доступа к данным с

блокировка считывателя ReadLock = boost::shared_lock<Lock>

а также писатель замки WriteLock = boost::unique_lock<Lock>,

Очевидно, что многие читатели могут читать данные одновременно, и только один пишет на них. Но вот подвох:

Один поток может иметь многократные замки на том же мьютексе, потому что это вызывает функции, которые сами блокируют данные (с ReadLock). Но, как я обнаружил, это вызывает блокировку:

  • Поток 1 считывает данные блокировки (Lock1)
  • Поток 2 ждет с блокировкой записи (LockW)
  • Поток 1 порождает другую блокировку чтения (Lock2), пока Lock1 еще жив

Теперь я получаю блокировку, потому что Lock2 ждет LockW выходить, LockW ждет Lock1, а такжеLock1 застрял из-за Lock2,

Я не знаю, возможно ли изменить дизайн так, чтобы каждый поток делал только один ReadLock, Я считаю, что имея систему, которая Писатели голодают решил бы мои проблемы. Есть ли общий Кстати, как справиться с моим делом?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]