std::conditon_variable需要和互斥量配合工作,使用的時候需要生成該類的物件。
wait函式:wait()函式傳入乙個互斥量和返回bool的可呼叫物件。如果返回true,那麼wait直接返回,否則wait解鎖互斥量並阻塞到本行,直到某個執行緒呼叫notify_one為止。
如果wait沒有第二個引數。那麼就跟第二個引數返回false一樣。直到其他執行緒呼叫notify_one為止。
當其他執行緒呼叫notify_one將正在wait的執行緒喚醒後,wait就將不斷獲取互斥量,一直到獲取成功。
獲取到鎖後有三種情況:
1. 如果wait有第二個引數,並且返回false。wait將繼續解鎖互斥量並阻塞。
2. 如果返回true,則往下執行。
3. 如果沒有第二個引數。則往下執行。
notify_one:解鎖正在等待當前條件的執行緒中的乙個,如果沒有執行緒在等待,則函式不執行任何操作,如果正在等待的執行緒多餘乙個,則喚醒的執行緒是不確定的。
notify_all:喚醒所有正在等待的執行緒。
#include
#include
#include
#include
#include
class
mesprocess
}void
outmsglist()
);command = msglist.
front()
; msglist.
pop_front()
; std::cout <<
"outmsglist執行緒"
<<
"正在執行,取出數字為:"
<< command << std::endl;
uniqlock.
unlock()
;}}private
: std::list<
int> msglist;
std::mutex my_mutex;
std::condition_variable my_cond;
//生成乙個條件變數物件};
intmain()
C 11 併發與多執行緒學習記錄(二)
主線程從main函式開始,自己建立的執行緒則需要提供乙個可呼叫物件。函式執行完畢,執行緒就退出。主線程退出後,整個程序也將執行完畢。一般情況下,如果其它子執行緒也還沒執行完畢,隨著主線程退出,子執行緒也將被作業系統全部中止。include include stdafx.h include inclu...
C 11 併發 多執行緒
通常情況下,原子操作是通過互斥 mutual exclusive 的訪問來保證的。linux下借助posix標準的pthread庫的互斥鎖 include include using namespace std static long long total 0 pthread mutex t m p...
C 11併發與多執行緒總結
一 執行緒概念 建立及傳參 二 獨佔互斥鎖 mutex,lock guardy與其他mutex 三 unique lock替換lock guardy 四 單例模式 singleton 下的執行緒安全問題 五 window臨界區 六 condition variable條件變數 七 std async...