多執行緒同步之條件變數

2022-01-22 18:48:27 字數 960 閱讀 7381

條件變數是執行緒同步的另一種手段,主要邏輯就是等待和喚醒。條件不滿足時,執行緒等待;條件滿足,執行緒被(其他執行緒)喚醒。條件變數一般和互斥量一起使用,因為需要保證多執行緒互斥地修改條件。

涉及到的函式有:

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.主要函式 初始化乙個條...