2012-02-21 36 views
3

我想用boost :: shared_mutex来实现多读卡器/单写入器互斥锁。我的问题非常简单,当另一个线程试图锁定shared_mutex进行写入时,线程是否有可能获得读者访问shared_mutex的权限?例如,我有10个线程,只有一个能写,boost :: shared_mutex多读卡器/单写入器互斥锁

  • 线程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锁,我的问题是,是否有可能螺纹4可以获得读访问到那个shared_mutex之前,线程3能写?读者/作者互斥体是否有可能陷入饥饿状态,例如100个读者v.s. 1位作家?

谢谢。

+0

Duplicate:http://stackoverflow.com/questions/4203467/multiple-readers-single-writer-locks-in-boost – 2012-02-21 20:18:43

+0

和在这里:http://stackoverflow.com/questions/989795/example-for- boost-shared-mutex-multiple-reads-one-write – 2012-02-21 20:19:32

+1

相关,但不是愚蠢。 – Thomas 2012-02-21 20:23:15

回答

3

显然boost::shared_mutex将公平政策留给实施。它可以是公平的,读者在写作者或写作者在读者之间,这取决于它对于你的特定版本而言可能是作家可能饿死的。

+0

都铎王朝,你能告诉我更多关于“读者在写作者”和“作家在读者”吗?谢谢。 – 2607 2012-02-21 21:13:17

+0

reader-over-writer意味着等待执行'shared_lock'的读者将优先于等待执行'lock'的编写者。作家在读者是相反的。 – Tudor 2012-02-21 21:15:30

+0

当你说“'boost :: shared_mutex'离开了公平策略直到实现”时,你可能会说'boost :: shared_lock'(和朋友)把公平策略留给了互斥实现 - 'boost :: shared_mutex '实施“读写器”政策(AFAIU)。 “写作者以外的读者”互斥策略是否有助于实施?还是我必须实施自己的互斥策略? – Guss 2013-11-12 08:46:53