C++標准庫之condition_variable


conditon_variable(條件變量)用於線程間同步

condition_variable有5個函數,函數名及對應的功能如下:

wait阻塞自己,等待喚醒

wait_for阻塞自己,等待喚醒,最多等待一段時間

wait_until阻塞自己,等待喚醒,最多等待到某個時間點

notify_one 喚醒一個等待在這個條件變量上的線程

notify_all 喚醒所有等待在這個條件變量上的線程

3個wait函數都要求輸入一個已經上鎖的unique_lock<mutex>變量,並且都有兩個版本,一個版本接受一個比較器,而另一個沒有。用wait來舉例說明:

void wait(unique_lock<mutex> &lck);

template<class Predicate> void wait(unique_lock<mutex> &lck,Predicate pred);

第二個版本可解決虛假喚醒的問題,其行為類似  while( !pred() ) wait(lck); 如果標准庫不提供這個版本,我們就只能自己寫這些代碼了

 

condition_variable_any與condition_variable基本一致,區別只是在於condition_variable要求的互斥鎖只能用unique_lock<mutex> ,而condition_variable_any則不作限制。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM