linux下c語言多執行緒之條件變數

2021-10-06 12:08:40 字數 1768 閱讀 8601

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.了解基本概念 程序 是計算機所執行的乙個任務的描述,是面向作業系統的最小單位,作業系統能執行很多程序 執行自己寫的乙份 程式,就是讓作業系統執行乙個自己程式的程序 作業系統會根據程式分配定量的資源 執行緒 面想程式 程序 的,把乙個程式分成多個執行緒可以實現並髮式,多工執行...