1.條件變數機制:
條件變數機制彌補了互斥機制的缺陷,允許乙個執行緒向另乙個執行緒傳送訊號(這意味著共享資源某種條件滿足時,可以通過某個執行緒發訊號的方式通知等待的執行緒),允許阻塞等待執行緒(當執行緒等待共享資源某個條件時,可讓該執行緒阻塞,等待其他執行緒傳送訊號通知)。
條件變數機制在處理等待共享資源滿足某個條件問題時,具有非常高的效率,且空間消耗相比互斥機制也有優勢。
2.條件變數與互斥量:
條件變數機制,所有等待乙個條件變數的執行緒會形成乙個佇列,這個佇列顯然是全域性的共享佇列。當執行緒進入等待狀態,將執行緒新增到佇列就需要使用互斥量,防止多個執行緒同時使用pthread_cond_wait,在呼叫pthread_cond_wait前加鎖互斥量,進入阻塞前解鎖互斥量。這也解釋了pthread_cond_wait函式引數需要互斥量。
3.條件變數基本函式:
#include
初始化條件變數:
int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr) ;
該函式第乙個引數為條件變數指標,第二個引數為條件變數屬性指標(一般設為null)。該函式按照條件變數屬性對條件變數程序初始化。
無條件等待:
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
該函式第乙個引數為條件變數指標,第二個為互斥量指標。該函式呼叫前,需本執行緒加鎖互斥量,加鎖狀態的時間內函式完成執行緒加入等待佇列操作 ,執行緒進入等待前函式解鎖互斥量。在滿足條件離開pthread_cond_wait函式之前重新獲得互斥量並加鎖,因此,本執行緒之後需要再次解鎖互斥量。
通知乙個執行緒:
int pthread_cond_signal(pthread_cond_t *cond);
該函式的引數為條件變數指標。該函式向佇列第乙個等待執行緒傳送訊號,解除這個執行緒的阻塞狀態。
通知所有執行緒:
int pthread_cond_broadcast(pthread_cond_t *cond);
該函式的引數為條件變數指標。該函式想佇列所有等待執行緒傳送訊號,解除這些執行緒的阻塞狀態。
銷毀條件變數:
int pthread_cond_destroy(pthread_cond_t *cond);
該函式銷毀條件變數。
#include
"pthread.h"
#include
"sched.h"
#include
"semaphore.h"
#include
"stdio.h"
pthread_t t1;
//pthread_t變數t1,用於獲取執行緒1的id
pthread_t t2;
//pthread_t變數t2,用於獲取執行緒2的id
pthread_mutex_t mutex;
pthread_cond_t cond;
int i=0;
//共享資源
void
*child1
(void
*arg)
else
pthread_mutex_unlock
(&mutex)
;sleep(1
);}}
void
*child2
(void
*arg)
}int
main
(void
)
Linux下C語言多執行緒例項
建立兩個執行緒訪問互斥資料,對其加1輸出。這是乙個多執行緒最常見的例子 include include include include define max 10 pthread t thread 2 pthread mutex t mut int number 0,i void thread1 p...
linux下C語言多執行緒程式設計
include include include include define max 10pthread t thread 2 pthread mutex t mut int number 0 i void thread1 printf thread1 主函式在等我完成任務嗎?n pthread e...
多執行緒程式設計 c語言linux下
適用與linux系統 1.了解基本概念 程序 是計算機所執行的乙個任務的描述,是面向作業系統的最小單位,作業系統能執行很多程序 執行自己寫的乙份 程式,就是讓作業系統執行乙個自己程式的程序 作業系統會根據程式分配定量的資源 執行緒 面想程式 程序 的,把乙個程式分成多個執行緒可以實現並髮式,多工執行...