Linux多執行緒 九 條件變數

2021-08-20 04:23:37 字數 2468 閱讀 9438

1.名稱:

pthread_cond_init

目標:條件變數初始化

標頭檔案:

#include < pthread.h>

函式原形:

int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr);

引數:cptr  條件變數

attr  條件變數屬性

返回值:

pthread_cond_init函式可以用來初始化乙個條件變數。他使用變數attr所指定的屬性來初始化乙個條件變數,如果引數attr為空,那麼它將使用預設的屬性來設定所指定的條件變數。

2.名稱:

pthread_cond_destroy

目標:條件變數摧毀

標頭檔案:

#include < pthread.h>

函式原形:

int pthread_cond_destroy(pthread_cond_t *cond);

引數:cptr  條件變數

返回值:

pthread_cond_destroy函式可以用來摧毀所指定的條件變數,同時將會釋放所給它分配的資源。呼叫該函式的程序也並不要求等待在引數所指定的條件變數上。

3.名稱:

pthread_cond_wait/pthread_cond_timedwait

目標:條件變數等待

標頭檔案:

#include < pthread.h>

函式原形:

int pthread_cond_wait(pthread_cond_t *cond,pthread_mutex_t *mutex);

int pthread_cond_timedwait(pthread_cond_t *cond,pthread_mutex_t mytex,const struct timespec *abstime);

引數:cond 條件變數

mutex 互斥鎖

返回值:

成功返回0,出錯返回錯誤編號。

第乙個引數*cond是指向乙個條件變數的指標。第二個引數*mutex則是對相關的互斥鎖的指標。函式pthread_cond_timedwait函式型別與函式pthread_cond_wait,區別在於,如果達到或是超過所引用的引數*abstime,它將結束並返回錯誤etime.pthread_cond_timedwait函式的引數*abstime指向乙個timespec結構。該結構如下:

typedef struct timespectimespec_t;

4.名稱:

pthread_cond_signal/pthread_cond_broadcast

目標:條件變數通知

標頭檔案:

#include < pthread.h>

函式原形:

int pthread_cond_signal(pthread_cond_t *cond);

int pthread_cond_broadcast(pthread_cond_t *cond);

引數:cond 條件變數

返回值:

成功返回0,出錯返回錯誤編號。

實驗:有兩條執行緒,一條用於設定資料,一條用於獲取資料,當設定資料還未完成時,不能獲取到資料

實驗原始碼:

#include

#include

#include

#include

typedef struct

result;

void * func_set(void *arg)

r->res=sum;

printf("the pthread %lx has write done\n",pthread_self());

pthread_mutex_lock(&r->mutex);

while(!r->is_wait)

pthread_mutex_unlock(&r->mutex);

printf("i am ready to broadcast\n");

pthread_cond_broadcast(&r->cond);

}void *func_get(void *arg)

int main(void)

if((err=pthread_create(&turtle,null,func_get,(void *)&r))!=0)

pthread_join(rabbit,null);

pthread_join(turtle,null);

pthread_mutex_destroy(&r.mutex);

pthread_cond_destroy(&r.cond);

printf("control thread id: %lx\n",pthread_self());

printf("finished!\n");

return 0;

}說明:is_wait這個變數必須要,因為set執行緒得等get執行緒準備好

Linux 執行緒 五 (條件變數)

我們先看一下條件變數的api 條件變數 1.定義條件變數 pthread cond t cond 2.初始化 pthread cond init cond,null 3.等待條件 pthread cond wait cond,mutex 1 mutex 如果沒有在互斥環境,形同虛設 2 如果在,wa...

Linux執行緒同步 4 條件變數

分類 應用程式設計 2007 08 22 19 39 3812人閱讀收藏 舉報條件變數分為兩部分 條件和變數.條件本身是由互斥量保護的.執行緒在改變條件狀態前先要鎖住互斥量.1.初始化 條件變數採用的資料型別是pthread cond t,在使用之前必須要進行初始化,這包括兩種方式 pthread....

Linux 執行緒同步3 條件變數

條件變數是執行緒同步的另一種同步機制。執行緒在改變條件狀態前必須首先鎖住互斥量,其他執行緒在獲得互斥量之前不會察覺到這種改變,因為必須鎖定互斥量以後才能計算條件。條件變數使用之前必須首先進行初始化,pthread cond t資料型別代表的條件變數可以用兩種方式進行初始化。對於靜態分配的條件變數可以...