C 條件變數

2022-05-08 14:33:11 字數 1321 閱讀 6594

1.作用:在c++11中,我們可以使用條件變數(std::condition_variable)實現多個執行緒間的同步操作;當條件不滿足時,相關執行緒被一直阻塞,並釋放cpu,直到某種條件出現,這些執行緒才會被喚醒。條件變數需要和互斥量(鎖)一起搭配使用。

用在多執行緒中。

執行緒a:等待乙個條件滿足

執行緒b:專門在訊息佇列中扔訊息,執行緒b觸發了這個條件,a就滿足條件了,可以繼續執行

2.常用的成員函式:

(1)wait():阻塞當前執行緒,直到條件變數被喚醒。

(2)wait_for:阻塞當前執行緒,直到條件變數被喚醒或到達指定時長後。

(3)wait_until:阻塞當前執行緒,直到條件變數被喚醒,或知道抵達指定的時間點。

(4)notify_once:通知乙個等待的執行緒。

(5)notify_all:通知所有等待的執行緒。

3.範例**

#include #include

#include

#include

#include

#include

#include

#include

using

namespace

std;

class

myclass

}void

removeorder()

);command = m_orderlist.front(); //

返回m_orderlist第乙個元素

m_orderlist.pop_front(); //

移除m_orderlist第乙個元素

sbguard.unlock(); //

unique_lock靈活,可以隨時解鎖,以免鎖住太長時間

cout

<< "

removeorder取出乙個元素

"<< command <

//其他任務

} }

private

: std::list

m_orderlist;

std::mutex m_mutex;

std::condition_variable m_cond;

//生成乙個條件變數物件

};int

main()

view code

C 條件變數

condition variable 類是同步原語,能用於阻塞乙個執行緒,或同時阻塞多個執行緒,直至另一線程修改共享變數 條件 並通知 condition variable 有意修改變數的執行緒必須 獲得 std mutex 常通過 std lock guard 在保有鎖時進行修改 在 std co...

c 之條件變數

條件變數是允許多個執行緒相互交流的同步原語。它允許一定量的執行緒等待 可以定時 另一線程的提醒,然後再繼續。條件變數始終關聯到乙個互斥。定義於標頭檔案 condition variable 提供與 std unique lock 關聯的條件變數 condition variable any 提供與任...

c 執行緒條件變數

此處有兩個執行緒,乙個作為生產者,把資料放入佇列中,乙個作為消費者,把資料從佇列中取出,所以對兩個執行緒而言,這個佇列是共用的,所以要加鎖進行保護。include stdafx.h include include include include include using namespace std...