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 #includeview code#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()
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...