Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: 2607Ответов: 1

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

Спасибо.

  • Дублирование: stackoverflow.com/questions / 4203467 / Craig H 22.02.2012
  • и здесь: stackoverflow.com/questions/989795/ Craig H 22.02.2012

c++multithreadingboostmutexboost-thread

Ответы

Ответ 1 · рейтинг 3 · Tudor

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы