簡體   English   中英

嘗試std :: lock [_unique] std :: shared_mutex的線程是否可以被調用std :: lock_shared的線程餓死?

[英]Can thread trying to std::lock[_unique] an std::shared_mutex be starved by threads calling std::lock_shared?

關於std::shared_mutex和獲得unique_lock

假設有3個線程:

  • 2個讀取器(嘗試對std::shared_mutex進行lock_shared() ),以及
  • 1個lock[_unique]() (試圖lock[_unique]() std::shared_mutex

試圖lock[_unique]()是否可能會餓死? 例如:始終至少有一個讀者擁有std::shared_lock ,而lock[_unique]()永遠不會成功。

或多或少:將std::shared_mutex上的lock[_unique]()阻塞會進一步lock_shared()嗎?


(肯定boost::upgrade_lock可以在這里工作,但是我想知道是否有任何對std::shared_mutex上裸std::unique_lock保證)

或多或少:將std::shared_mutex上的lock[_unique]()阻塞會進一步lock_shared()嗎?

該標准未指定是否應該執行此操作,它僅說明:

效果:阻塞調用線程,直到可以為調用線程獲得互斥體的共享所有權為止。

因此,是否使以后的讀者在等待未決的作者后面等待,取決於實現。

如果實現要防止寫程序飢餓,則可能需要在線程嘗試獲得唯一鎖時設置“寫程序等待”標志,以便以后獲得共享鎖的嘗試將阻塞,並在唯一鎖后面。 在N2406參考實現中,這是state成員中的write_entered_位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM