码迷,mamicode.com
首页 > 编程语言 > 详细

多线程的广播

时间:2016-09-17 20:31:03      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

 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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!