首页 > 代码库 > 多线程的广播
多线程的广播
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,则等待,否则对其减一,表示收到。 因此,我认为条件变量应该伴随一个全局变量一起使用。
多线程的广播
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。