多執行緒中條件變數的使用

2021-10-20 20:16:46 字數 611 閱讀 9971

如果想要實現在乙個執行緒中需要一直等待某種條件被滿足的時候,該執行緒才會進行處理,這個時候可以使用條件變數的方式來實現

乙個執行緒中進行wait,另一線程中當條件滿足時發出通知notify,這樣就不需要一直進行while迴圈進行判斷條件了

例如生產者和消費者情況:

#include #include #include #include std::mutex mutex;

std::condition_variable cv;

std::vectorvec;

void consume()

); //等待生產者發出通知

//實際實現

//template//void wait(unique_lock& _lck, _predicate _pred)

// //等價於這樣寫

/*while (vec.empty()) //使用while而不是if防止作業系統有概率也會喚醒被阻塞的執行緒

*/ std::cout << "consume"<< vec.size() << std::endl;

}void produce()

int main()

多執行緒中條件變數使用的深入剖析

參考部落格 之前一直以為條件變數在pthread cond wait時會一直持有互斥量,後來看到陳碩的書上的例子,發現如果是這樣會很容易造成死鎖,因此才考慮到是自己想錯了,於是在網上搜尋了資料終於弄明白了是怎麼回事 第一點 條件變數在pthread cond wait狀態不持有互斥鎖 條件變數進入p...

條件變數 多執行緒

最近看 unix環境高階程式設計 多執行緒同步,看到他舉例說條件變數pthread cond t怎麼用,愣是沒有看懂,只好在網上找了份 跑了跑,才弄明白 cpp view plain copy include include include pthread mutex t mutex pthread...

多執行緒的條件變數

條件變數是利用執行緒間共享的全域性變數進行同步的一種機制,主要包括兩個動作 乙個執行緒等待 條件變數的條件成立 而掛起 另乙個執行緒使 條件成立 給出條件成立訊號 為了防止競爭,條件變數的使用總是和乙個互斥鎖結合在一起。1 建立和登出 條件變數和互斥鎖一樣,都有靜態動態兩種建立方式,靜態方式使用pt...