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

У меня есть данные в сочетании с 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 ответов

Другие вопросы по тегам