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則不作限制。
