boost :: shared_mutex мьютекс с несколькими программами чтения / записи - PullRequest
3 голосов
/ 22 февраля 2012

Я пытаюсь использовать boost :: shared_mutex для реализации мьютекса с несколькими читателями и с одним писателем.Мой вопрос довольно прост, возможно ли для потока получить доступ читателя к shared_mutex, когда другой поток пытается заблокировать этот shared_mutex для записи?Например, у меня есть 10 потоков, только один из них может писать,

  • поток 1 имеет shared_lock для этого shared_mutex и пытается что-то прочитать
  • поток 2 имеет shared_lock для этогоshared_mutex и пытается что-то прочитать
  • поток 3 имеет unique_lock для этого shared_mutex и пытается что-то записать
  • поток 4 имеет shared_lock для этого shared_mutex и пытается что-то прочитать
  • поток 5 имеет shared_lock для этого shared_mutex и пытается что-то прочитать

В данный момент shared_mutex заблокирован thread 2 , мой вопрос:Возможно ли, что поток 4 может получить доступ для чтения к этому shared_mutex, прежде чем поток 3 сможет записать?Возможно ли, чтобы мьютекс читателя / писателя когда-либо попадал в ситуацию голодания, например, 100 читателей против 1 писателя?

Спасибо.

1 Ответ

3 голосов
/ 22 февраля 2012

Очевидно, boost::shared_mutex оставляет политику справедливости вплоть до реализации. Это может быть как честный, читатель над писателем, так и писатель над читателем, поэтому в зависимости от того, какая именно версия предназначена для вас, возможно, что писатель может голодать.

...