2012-02-21 69 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