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資料型別代表的條件變數可以用兩種方式進行初始化。對於靜態分配的條件變數可以...