互斥鎖有乙個明顯的缺點就是只有兩種狀態:鎖定和非鎖定,而條件變數通過允許執行緒阻塞和等待另個執行緒傳送訊號的方法來彌補互斥鎖的不足。條件變數通常和互斥鎖一起使用。
條件變數的結構為pthread_cond_t
涉及函式:
pthread_cond_init
pthread_cond_detroy
pthread_cond_wait
pthread_cond_timewait
pthread_cond_broadcast
pthread_cond_signal
簡單測試用例為:
1 #include
2 #include
3 #include
4 typedef enum bool;
5 char buffer[128];
6 bool buffer_has_data = false;
7 pthread_mutex_t mutex;
8 pthread_cond_t cond;
9 10 void write_buffer(char *data)
11 19 pthread_mutex_unlock(&mutex);
20 }
21 void read_buffer(void)
22 30 if (buffer_has_data)
31
35 pthread_mutex_unlock(&mutex);
36 sleep(1);
37 }
38 }
39 40 int main( int argc, char **argv)
41 54 return 0;
55 }
其實就是在互斥鎖的基礎上增加了條件變數的應用。
linux執行緒同步 2 條件變數
一.概述 條件變數總是和互斥量一起使用,互斥量保護著條件變數,防止多個執行緒對條件變數產生競爭。等會寫個小例子,看它們如何一起合作!二.函式介面 1.初始化條件變數 1.1 巨集常量初始化 1 pthread cond t cond pthread cond initializer 1.2 函式初始...
Linux執行緒同步 4 條件變數
分類 應用程式設計 2007 08 22 19 39 3812人閱讀收藏 舉報條件變數分為兩部分 條件和變數.條件本身是由互斥量保護的.執行緒在改變條件狀態前先要鎖住互斥量.1.初始化 條件變數採用的資料型別是pthread cond t,在使用之前必須要進行初始化,這包括兩種方式 pthread....
Linux 執行緒同步3 條件變數
條件變數是執行緒同步的另一種同步機制。執行緒在改變條件狀態前必須首先鎖住互斥量,其他執行緒在獲得互斥量之前不會察覺到這種改變,因為必須鎖定互斥量以後才能計算條件。條件變數使用之前必須首先進行初始化,pthread cond t資料型別代表的條件變數可以用兩種方式進行初始化。對於靜態分配的條件變數可以...