首页 > 代码库 > 多线程的广播

多线程的广播

 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,则等待,否则对其减一,表示收到。   因此,我认为条件变量应该伴随一个全局变量一起使用。

多线程的广播