[英]std::shared_mutex not scaling with threads doing 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個線程:
std::shared_mutex
進行lock_shared()
),以及 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.