簡體   English   中英

std :: condition_variable :: notify_all()保證

[英]std::condition_variable::notify_all() guarantees

假設條件變量上有N個等待線程(讀取器),這些線程由另一個線程(生產者)通知。 現在所有的N個讀者都會嘗試擁有他們所引用的unique_lock,一次一個。 現在假設生產者想要再次鎖定相同的unique_lock,出於某些原因,在任何那些醒來的讀者甚至開始擁有鎖之前。 按照標准,是否有保證生產者只有在所有通知讀者開始鎖定步驟后才能成功(嘗試)進入其關鍵部分?

除了§1.10第2段給出的相當模糊之外,無法保證調度:

實現應確保所有未阻塞的線程最終取得進展。 [ 注意:標准庫函數可能會靜默阻塞I / O或鎖定。 執行環境中的因素(包括外部強加的線程優先級)可能會阻止實現對前進進度做出某些保證。 - 結束說明 ]

如果您想確保沒有讀者在制作人之前獲得鎖定,您可以在通知之前獲取鎖定。

如果你想確保在所有的讀者都用它做你需要一些更為復雜的同步,可能涉及某種計數器的生產者只能獲得鎖。

暫無
暫無

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

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