c 之條件變數

2021-10-21 08:25:52 字數 1412 閱讀 8208

條件變數是允許多個執行緒相互交流的同步原語。它允許一定量的執行緒等待(可以定時)另一線程的提醒,然後再繼續。條件變數始終關聯到乙個互斥。

定義於標頭檔案

① 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 個函式的返回值都是 成...