标签:
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 //if( x == 0) 14 { 15 printf("pthread_id: %d, wait for command.\n", pthread_self()); 16 pthread_cond_wait(&cond1,&mutex1); 17 } 18 printf("I %d got command,let‘s go.\n", pthread_self()); 19 pthread_mutex_unlock(&mutex1); 20 return NULL; 21 } 22 23 24 int main() 25 { 26 pthread_t pth_array[5]; 27 28 int i=0; 29 for(;i<5;i++) 30 { 31 pthread_create(&pth_array[i],NULL,doit,&i); 32 } 33 34 35 pthread_mutex_lock(&mutex1); 36 37 pthread_cond_broadcast(&cond1); 38 pthread_mutex_unlock(&mutex1); 39 40 41 i=0; 42 for(;i<5;i++) 43 { 44 pthread_join(pth_array[i],NULL); 45 } 46 47 return 0; 48 }
如果发出信号(pthread_cond_signal, pthread_cond_broadcast)时,没有线程在条件变量的wait
中等待,则这个信号丢失,其他线程走到wait时,投入睡眠状态。
此处可以增加一个x,广播中其值取线程数,线程里判断如果其值为0,则等待,否则对其减一,表示收到。 因此,我认为条件变量应该伴随一个全局变量一起使用。
标签:
原文地址:http://www.cnblogs.com/lijinping/p/5879548.html