/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的變數,所...