【问题标题】:boost::shared_mutex multiple-reader / single-writer mutexboost::shared_mutex 多读/单写互斥
【发布时间】:2012-03-12 04:10:24
【问题描述】:

我正在尝试使用 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 当前被 thread 2 共享锁定,我的问题是 thread 4 是否有可能在 thread 之前获得对该 shared_mutex 的读取访问权限3会写吗?读/写互斥体是否有可能陷入饥饿状态,例如 100 个读卡器对 100 个读卡器1个作家?

谢谢。

【问题讨论】:

标签: c++ multithreading boost mutex boost-thread


【解决方案1】:

显然boost::shared_mutex 将公平政策留给实施。它可以是公平的、reader-over-writer 或 writer-over-reader,因此根据您的特定版本,作者可能会被饿死。

【讨论】:

  • Tudor,你能告诉我更多关于“reader-over-writer”和“writer-over-reader”的信息吗?谢谢。
  • reader-over-writer 意味着等待执行shared_lock 的读者将优先于等待执行lock 的写入者。 writer-over-reader 则相反。
  • 当您说“boost::shared_mutex 将公平政策留给实施”时,您可能的意思是说boost::shared_lock(和朋友)将公平政策留给互斥锁实施 - boost::shared_mutex 实施“读写器”策略(AFAIU)。 “writer-over-reader”互斥策略是否有提升实现,还是我必须实现自己的?
猜你喜欢
  • 2010-11-02
  • 2013-08-27
  • 2022-06-13
  • 2011-01-21
  • 1970-01-01
  • 2011-03-19
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
相关资源
最近更新 更多