boost::shared_mutex 是一个多读单写的互斥锁。

3
我试图使用boost::shared_mutex实现多读单写互斥量。我的问题很简单,当另一个线程尝试为写入锁定该shared_mutex时,线程是否可能获得对shared_mutex的读取访问权?例如,我有10个线程,只有一个线程可以写入,

  • 线程1在该shared_mutex上获得了shared_lock并尝试读取某些内容
  • 线程2在该shared_mutex上获得了shared_lock并尝试读取某些内容
  • 线程3在该shared_mutex上获得了unique_lock并尝试写入某些内容
  • 线程4在该shared_mutex上获得了shared_lock并尝试读取某些内容
  • 线程5在该shared_mutex上获得了shared_lock并尝试读取某些内容

shared_mutex当前由线程2共享锁定,我的问题是:是否可能在线程3写入之前,线程4可以获得对该shared_mutex的读取访问权?读/写锁是否可能陷入饥饿状态,例如100个读者与1个写者?

谢谢。


重复:https://dev59.com/PW855IYBdhLWcg3wrGdY - Craig H
请提供一个使用Boost共享互斥锁实现多读单写的示例。 - Craig H
1个回答

4

显然,boost::shared_mutex 将公平策略留给实现。它可以是公平的、读者优先或写者优先,因此,取决于您使用的特定版本,可能会导致写入者饥饿。


Tudor,你能告诉我更多关于“读者优先”和“写者优先”的内容吗?谢谢。 - 2607
读者优先(reader-over-writer)意味着等待执行 shared_lock 的读者将优先于等待执行 lock 的写者。写者优先(writer-over-reader)则相反。 - Tudor
当你说"boost::shared_mutex将公平策略交给实现"时,你可能是想说boost::shared_lock(以及相关类)将公平策略交给了互斥锁的实现 - boost::shared_mutex实现了"读者优先写者"策略(据我所知)。是否有writer-over-reader互斥锁策略的boost实现,还是我需要自己实现? - Guss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接