当前位置:  技术问答>linux和unix

pthread_cond_broadcast问题

    来源: 互联网  发布时间:2016-11-09

    本文导语:  我的程序代码如下: pthread_mutex_t mymutex1 = PTHREAD_MUTEX_INITIALIZER;  12 pthread_mutex_t mymutex2 = PTHREAD_MUTEX_INITIALIZER;  13 pthread_cond_t  mycond  = PTHREAD_COND_INITIALIZER;  14 void *mythread1(void *param)  15 {  16     pthread_mutex_...

我的程序代码如下:

pthread_mutex_t mymutex1 = PTHREAD_MUTEX_INITIALIZER;
 12 pthread_mutex_t mymutex2 = PTHREAD_MUTEX_INITIALIZER;
 13 pthread_cond_t  mycond  = PTHREAD_COND_INITIALIZER;
 14 void *mythread1(void *param)
 15 {
 16     pthread_mutex_lock(&mymutex1);
 17     pthread_cond_wait(&mycond,&mymutex1);
 18     fprintf(stderr,"this is mythread1.n");
 19     pthread_mutex_unlock(&mymutex1);
 20     return NULL;
 21 }
 22 void *mythread2(void *param)
 23 {
 24     pthread_mutex_lock(&mymutex2);
 25     pthread_cond_wait(&mycond,&mymutex2);
 26     fprintf(stderr,"this is mythread2.n");
 27     pthread_mutex_unlock(&mymutex2);
 28     return NULL;
 29 }
 30 int main(int argc,char* argv[],char *envp[])
 31 {
 32     int i;
 33     pthread_t tid1,tid2;
 34     pthread_create(&tid1,NULL,mythread1,NULL);
 35     pthread_create(&tid2,NULL,mythread2,NULL);
 36     getchar();
 37     if(pthread_cond_broadcast(&mycond)){
 38         printf("errorn");
 39         return 1;
 40     }
 41     getchar();
 42     printf("this is main thread.n");
 43     return 0;
 44 }

结果只打印出了“this is mythread1”,为什么?

|
楼主,我给你发的英文你没有看啊?

你看了就会明白的,broadcast发送信号前,如果没有去显式地获取锁的话,如果这时发出条件变量信号,那么broadcast会去锁住需要调度的线程的锁并触发信号

cond_wait就会在信号唤醒之后试图获取到它之前获取到的锁,这时,由于cond_broadcast已经锁住了其中一个没有释放

就出现了只有一个wait能够获取到锁的情况了, 所以,有一个线程一定是阻塞在pthread_cond_wait函数上了

读读我给你发的英文就明白了哦, 楼主, 记得给我散分哦

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3