條件變數是允許多個執行緒相互交流的同步原語。它允許一定量的執行緒等待(可以定時)另一線程的提醒,然後再繼續。條件變數始終關聯到乙個互斥。
定義於標頭檔案
① condition_variable 提供與 std::unique_lock 關聯的條件變數
② condition_variable_any 提供與任何鎖型別關聯的條件變數
③ notify_all_at_thread_exit 安排到在此執行緒完全結束時對 notify_all 的呼叫
④ cv_status 列出條件變數上定時等待的可能結果
condition_valiable :
一:建構函式
condition_variable();
condition_variable(const condition_variable&) = delete;
1) 構造 std::condition_variable 型別物件。
2) 複製建構函式被刪除。
~condition_variable();
銷毀 std::condition_variable 型別物件。
若已通知所有執行緒,呼叫析構函式才是安全的。
二:通知函式
notify_one 通知乙個等待的執行緒
notify_all 通知所有等待的執行緒
三:等待函式
void wait( std::unique_lockstd::mutex& lock );
wait 阻塞當前執行緒(並釋放鎖),直到條件變數被喚醒;
wait_for 阻塞當前執行緒,直到條件變數被喚醒,或到指定時限時長後
wait_until 阻塞當前執行緒,直到條件變數被喚醒,或直到抵達指定時間點
#include
#include
#include
using
namespace std;
std::mutex mtx;
std::condition_variable cv;
int num =1;
const
int n =99;
int i =0;
void
print_a()
cv.wait
(lock)
;//1.釋放鎖 2.掛起,等待返回 3.被喚醒後需要重新持有鎖才能返回}if
(i <= n)
cv.notify_all()
;//喚醒所有掛起的執行緒
}}
C 條件變數
1.作用 在c 11中,我們可以使用條件變數 std condition variable 實現多個執行緒間的同步操作 當條件不滿足時,相關執行緒被一直阻塞,並釋放cpu,直到某種條件出現,這些執行緒才會被喚醒。條件變數需要和互斥量 鎖 一起搭配使用。用在多執行緒中。執行緒a 等待乙個條件滿足 執行...
C 條件變數
condition variable 類是同步原語,能用於阻塞乙個執行緒,或同時阻塞多個執行緒,直至另一線程修改共享變數 條件 並通知 condition variable 有意修改變數的執行緒必須 獲得 std mutex 常通過 std lock guard 在保有鎖時進行修改 在 std co...
Linux 之 條件變數
pthread cond init函式 pthread cond destroy函式 pthread cond wait函式 pthread cond timedwait函式 pthread cond signal函式 pthread cond broadcast函式 以上6 個函式的返回值都是 成...