线程的条件变量
1 #include <pthread.h> 2 #include <stdio.h> 3 #include <unistd.h> 4 5 static int x = 0; 6 pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER; 7 pthread_cond_t cond1 = PTHREAD_COND_INITIALIZER; 8 9 void* doit(void *p) 10 { 11 sleep(*(int *)p); ; 12 pthread_mutex_lock(&mutex1); 13 x++; 14 printf("pthread_id: %d, x is: %d\n", pthread_self(), x); 15 pthread_cond_signal(&cond1); 16 pthread_mutex_unlock(&mutex1); 17 return NULL; 18 } 19 20 21 int main() 22 { 23 pthread_t pth_array[5]; 24 25 26 27 int i=0; 28 for(;i<5;i++) 29 { 30 pthread_create(&pth_array[i],NULL,doit,&i); 31 } 32 33 34 int iLoop=5; 35 while(iLoop>0) 36 { 37 pthread_mutex_lock(&mutex1); 38 if( x==0 ) 39 { 40 pthread_cond_wait(&cond1,&mutex1); 41 } 42 43 x--; 44 iLoop--; 45 printf("got one time x.\n"); 46 pthread_mutex_unlock(&mutex1); 47 }
48 i=0; 49 for(;i<5;i++) 50 { 51 pthread_join(pth_array[i],NULL); 52 } 53 54 return 0; 55 }
pthread_cond_wait时,需要传入条件变量和互斥变量,并且外围需要锁住和释放互斥锁。因为我们等待时判断的变量往往就是引起冲突的共享变量。

浙公网安备 33010602011771号