boost :: shared_mutex мьютекс с несколькими читателями / одиночными записями

Я пытаюсь использовать 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 в настоящее время заблокирован потоком 2, мой вопрос заключается в том, может ли поток 4 получить доступ на чтение к этому shared_mutex перед потоком 3 можете написать? Возможно ли, чтобы мьютекс читателя / писателя когда-либо попадал в ситуацию голода, например, 100 читателей против. 1 писатель?

Спасибо.


person 2607    schedule 21.02.2012    source источник
comment
Дублирование: stackoverflow.com/questions / 4203467 /   -  person Craig H    schedule 22.02.2012
comment
и здесь: stackoverflow.com/questions/989795/   -  person Craig H    schedule 22.02.2012


Ответы (1)


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

person Tudor    schedule 21.02.2012
comment
Тюдор, не могли бы вы рассказать мне больше о читателе-писателе и писателе-читателе? Спасибо. - person 2607; 22.02.2012
comment
читатель-писатель означает, что читатели, ожидающие выполнения shared_lock, будут иметь приоритет над писателями, ожидающими выполнения lock. писатель-над-читатель - наоборот. - person Tudor; 22.02.2012
comment
Когда вы говорите, что boost::shared_mutex оставляет политику справедливости до реализации, вы, вероятно, имели в виду, что boost::shared_lock (и друзья) оставляют политику справедливости реализации мьютекса - boost::shared_mutex реализует политику чтения поверх записи (AFAIU). Есть ли усиленная реализация для политики мьютекса «писатель поверх читателя» или мне нужно реализовать свою собственную? - person Guss; 12.11.2013