线程的条件变量

 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时,需要传入条件变量和互斥变量,并且外围需要锁住和释放互斥锁。因为我们等待时判断的变量往往就是引起冲突的共享变量。

posted @ 2016-09-17 19:45  navas  阅读(166)  评论(0)    收藏  举报