條件變數的用法

2021-10-21 20:01:18 字數 1214 閱讀 9332

/wait

條件變數,標頭檔案。用於多個執行緒併發操作共享變數(即條件)時,阻塞其中的乙個或者多個變數,在滿足指定條件(共享變數被修改使得等待條件滿足,或者阻塞超時)下喚醒這個或者這些變數。

#

include

#include

#include

#include

#include

std::mutex m;

std::condition_variable cv;

std::string data;

bool ready =

false

;bool processed =

false

;void

worker_thread()

);// 等待後,我們占有鎖。

std::cout <<

"worker thread is processing data\n"

; data +=

" after processing"

;// 傳送資料回 main()

processed =

true

; std::cout <<

"worker thread signals data processing completed\n"

;// 通知前完成手動解鎖,以避免等待執行緒才被喚醒就阻塞(細節見 notify_one )

lk.unlock()

; cv.

notify_one()

;}intmain()

cv.notify_one()

;// 等候 worker);

} std::cout <<

"back in main(), data = "

<< data <<

'\n';

worker.

join()

;}

最終輸出:

main() signals data ready for processing

worker thread is processing data

worker thread signals data processing completed

back in main(), data = example data after processing

執行緒條件變數pthread cond t用法

編譯 x61 horizon threads gcc thread cond.c lpthread o tcd 以下是程式執行結果 x61 horizon threads tcd thread1 lock 30 thread1 unlock 40 thread2 lock 52 thread2 wa...

條件變數和鎖的配合用法

最近在看clamd的 其中thrmgr.c中多次使用了條件變數,寫一小段 來複習一下條件變數的用法。條件變數主要應用在多執行緒的同步,比如用於生產者消費者模型。當沒有產出的時候,為了避免消費者空轉耗費cpu,可以使用條件變數進行阻塞。在有產出的時候進行通知,進行消費。使用中通常和互斥鎖配合使用,主要...

變數的用法

cat mb2.sh echo n enter a sizi in kb read kb bytes expr kb 1024 mb expr kb 1024 mb2.sh enter a sizi in kb 12345 如果沒有花括號,則 kb會成為 kbkb。因為沒有定義名為kbkb的變數,所...