linux C條件變數

2021-09-23 23:50:05 字數 2069 閱讀 4643

條件變數是一種執行緒間同步的機制,使用條件變數為了防止競爭,都會和乙個互斥鎖配合使用

操作函式

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...