C 11 併發與多執行緒學習記錄(七)

2021-10-02 10:10:40 字數 1101 閱讀 9076

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...