pthread_cond_init

pthread_cond_init,是一條用來初始化的條件變數。

基本介紹

  • 外文名:pthread_cond_init
  • 作用:用來初始化一個條件變數
  • 原型:extern int pthread_cond_init _
  • cond:指向結構pthread_cond_t的指針
術語介紹,初始化方式,靜態賦值法,使用函式,

術語介紹

函式pthread_cond_init()被用來初始化一個條件變數
它的原型為:
extern int pthread_cond_init __P ((pthread_cond_t *__cond,__const pthread_condattr_t *__cond_attr));
其中cond是一個指向結構pthread_cond_t的指針
cond_attr是一個指向結構pthread_condattr_t的指針。
結構pthread_condattr_t是條件變數的屬性結構,和互斥鎖一樣我們可以用它來設定條件變數是進程內可用還是進程間可用,默認值是PTHREAD_ PROCESS_PRIVATE,即此條件變數被同一進程內的各個執行緒使用;如果選擇為PTHREAD_PROCESS_SHARED則為多個進程間各執行緒公用。注意初始化條件變數只有未被使用時才能重新初始化或被釋放。
返回值:函式成功返回0;任何其他返回值都表示錯誤。
釋放一個條件變數的函式為pthread_cond_ destroy(pthread_cond_t *cond)。

初始化方式

靜態賦值法

將宏結構常量PTHREAD_COND_INITIALIZER賦予互斥鎖:
pthread_cond_t cond = PTHREAD_COND_INITIALIZER

使用函式

使用pthread_cond_init函式
示例:
   #include <pthread.h>  #include <stdio.h>  #include <stdlib.h> pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; /*初始化互斥鎖*/ pthread_cond_t cond = PTHREAD_COND_INITIALIZER; //初始化條件變數 void *thread1(void *); void *thread2(void *); int i=1; int main(void) { pthread_t t_a; pthread_t t_b; pthread_create(&t_a,NULL,thread1,(void *)NULL);/*創建進程t_a*/ pthread_create(&t_b,NULL,thread2,(void *)NULL); /*創建進程t_b*/ pthread_join(t_b, NULL);/*等待進程t_b結束*/ pthread_mutex_destroy(&mutex); pthread_cond_destroy(&cond); exit(0); } void *thread1(void *junk) { for(i=1;i<=9;i++) { printf("IN one\n"); pthread_mutex_lock(&mutex);// if(i%3==0) pthread_cond_signal(&cond);/*條件改變,傳送信號,通知t_b進程*/ else printf("thead1:%d\n",i); pthread_mutex_unlock(&mutex);//*解鎖互斥量*/ printf("Up Mutex\n"); sleep(10); } } void *thread2(void *junk) { while(i<9) { printf("IN two \n"); pthread_mutex_lock(&mutex); if(i%3!=0) pthread_cond_wait(&cond,&mutex);/*等待*/ printf("thread2:%d\n",i); pthread_mutex_unlock(&mutex); printf("Down Mutex\n"); sleep(10); } }

相關詞條

熱門詞條

聯絡我們