條件變數是執行緒同步的另一種手段,主要邏輯就是等待和喚醒。條件不滿足時,執行緒等待;條件滿足,執行緒被(其他執行緒)喚醒。條件變數一般和互斥量一起使用,因為需要保證多執行緒互斥地修改條件。
涉及到的函式有:
int pthread_cond_init(pthread_cond_t *restrict cond,const pthread_condattr_t *restrict attr);
int pthread_cond_destroy(pthread_cond_t *cond);
int pthread_cond_wait(pthread_cond_t *restrict cond,
pthread_mutex_t *restrict mutex);
int pthread_cond_signal(pthread_cond_t *cond);
int pthread_cond_broadcast(pthread_cond_t *cond);
實戰訓練:
有三個執行緒分別列印a、b、c,請用多執行緒程式設計實現,在螢幕上迴圈列印10次abcabc…
solution:
#include #include#include
#define n 10
#define m 3 //
number of threads
pthread_mutex_t mutex =pthread_mutex_initializer;
pthread_cond_t cond;
int m = 0
;void* thr_fn(void *arg)
return (void*)0;}
intmain()
reference:
【機試】華為2014校招機試:多執行緒迴圈列印十次abc
Qt 多執行緒同步之條件變數
qwaitcondition與qmutex結合,可以使乙個執行緒在滿足一定條件時通知其他多個執行緒,使它們及時作出響應,這樣比只使用互斥量效率要高一些。常用api 生產者 消費者模型 ifndef mythread h define mythread h include include includ...
執行緒同步之條件變數
程序空間中有乙個儲存量a,該程序空間內存在多個執行緒,這多個執行緒都會訪問到a,或讀或寫,為了保障每個執行緒當前讀到的是正確的a而不是別的執行緒正在修改過程中的a,我們在訪問a之前需要對a進行加鎖,使得我們在訪問a的時候別的執行緒禁止訪問a,這是互斥量鎖。或者允許多個執行緒同時讀a,這是讀寫鎖。還有...
執行緒同步之條件變數
1.條件變數是鎖嗎?不是鎖,但是條件變數能夠阻塞執行緒 條件變數需要和互斥鎖一起使用 互斥量 保護一塊共享資料 條件變數 引起阻塞 2.條件變數的兩個動作?當條件滿足,通知阻塞的執行緒執行緒開始工作 條件不滿足,阻塞執行緒 3.條件變數的型別 pthread cond t 4.主要函式 初始化乙個條...