條件變數是一種執行緒間同步的機制,使用條件變數為了防止競爭,都會和乙個互斥鎖配合使用
操作函式
pthread_cond_init
(&cond,
null);
/* 動態初始化條件變數 */
pthread_cond_t cond = pthread_cond_initializer;
/* 靜態初始化條件變數 */
pthread_cond_wait
(&cond)
;/* 等待條件變數觸發 */
pthread_cond_timedwait
(&cond)
;/* 超時等待條件變數觸發 */
pthread_cond_signal
(&cond)
;/* 啟用乙個等待該條件的執行緒,單播 */
pthread_cond_broadcast
(&cond)
;/* 啟用所有等待該條件的執行緒,廣播 */
pthread_cond_destroy
(&cond)
;/* 銷毀條件變數 */
執行緒同步例項
下面的例子目的是讓thread_2先於thread_1執行
#include
#include
#include
#include
#include
pthread_mutex_t lock;
pthread_cond_t cond;
void
*thread_1
(void
*data)
void
*thread_2
(void
*data)
intmain
(int argc,
char
const
*ar**)
條件變數始終都會和乙個互斥鎖配合使用,當pthread_cond_wait()被呼叫阻塞住執行緒的時候,lock會被自動釋放,當訊號來的時候會自動上鎖。thread_1獲取到互斥鎖之後,因為條件變數的存在,thread_1被阻塞住,互斥鎖自動釋放掉,當條件變數滿足條件之後系統會將互斥鎖再重新鎖上
單播和廣播例項
#include
#include
#include
#include
#include
pthread_mutex_t lock;
pthread_cond_t cond;
void
*thread_1
(void
*data)
void
*thread_2
(void
*data)
intmain
(int argc,
char
const
*ar**)
else
if(cid ==2)
else
if(cid ==3)
}pthread_join
(pid[0]
,null);
pthread_join
(pid[1]
,null);
pthread_mutex_unlock
(&lock)
;pthread_mutex_destroy
(&lock)
;pthread_cond_destroy
(&cond)
;return0;
}
pthread_cond_signal()傳送的是單播訊號,也就是thread_1和thread_2中會有乙個執行,傳送幾次就會有幾個執行緒接收到訊號。
pthread_cond_broadcast()傳送的是廣播訊號,當它執行的時候thread_1和thread_2會一起收到訊號,事實上無論有多少個執行緒在等待cont條件,如果想讓它們都執行起來,通過pthread_cond_broadcast()廣播即可
linux c 執行緒池 互斥變數 條件變數
執行緒池主要實現模組multithreadtest.c include include include include include include typedef struct threadworker typedef struct threadpool static struct thread...
Linux C 多執行緒程式設計條件變數
二 條件變數 這裡主要說說 pthread cond wait 的用法,在下面有說明。條件變數是利用執行緒間共享的全域性變數進行同步的一種機制,主要包括兩個動作 一 個執行緒等待 條件變數的條件成立 而掛起 另乙個執行緒使 條件成立 給出條件成立訊號 為了防止競爭,條件變數的使用總是和乙個互斥鎖結合...
linux c 招聘條件
多看招聘資訊可以明確學習方向。要求 1 掌握linux api使用,精通c c 語言,並熟練使用stl,熟悉各種設計模式 2 掌握linux c c 開發環境,熟練掌握gcc,gdb,cvs,精通linux下的多執行緒程式設計 3 熟練掌握網路程式設計的基本模型和方法,有實際專案的開發經驗,熟悉tc...