免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2008 | 回复: 2

条件变量broadcast只能唤醒一个线程? [复制链接]

论坛徽章:
0
发表于 2009-11-30 16:24 |显示全部楼层
写一个定时任务
三个线程如下:
(alarm_fun是时间线程的闹钟处理函数)

alarm_fun()
{
     pthread_mutex_lock(&mutex_a);
     pthread_mutex_lock(&mutex_b);
     pthread_cond_broadcast(&cond);
     pthread_mutex_unlock(&mutex_a);
     pthread_mutex_unlock(&mutex_b)
    alarm(60);
}

pthread_a()
{
    while(1)
    {
      pthread_mutex_lock(&mutex_a);
      pthread_cond_wait(&cond, &mutex_a);
      pthread_mutex_unlock(&mutex_a);

      /*相应是程序代码*/
      ......
      ...
      }
}


pthread_b()
{   
      while(1)
      {
       pthrad_mutex_lock(&mutex_b);
       pthread_cond_wait(&cond, &mutex_b);
        pthread_mutex_unlock(&mutex_b);

  /*相应的程序代码*/

   ....
   ....
   }
}



简单的描述就是,说,让线程a、b平时都挂起,只有当时间到了才通过pthread_cond_broadcast来唤醒所有挂起在条件变量cond上的线程。
突然发现每次broadcast的时候只能唤醒一个线程,另一个线程似乎永远无法得到唤醒。




各位,帮帮忙看看问题出在什么地方。谢谢

[ 本帖最后由 feiyinziiu 于 2009-11-30 16:26 编辑 ]

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
发表于 2009-11-30 16:40 |显示全部楼层
http://topic.csdn.net/t/20060525/14/4778210.html

你是想用多timer吧?
有个rt库就可以了
/usr/librt.so

论坛徽章:
0
发表于 2009-11-30 19:05 |显示全部楼层

回复 #2 T-Bagwell 的帖子

谢谢,我去看看。
不过我的问题已经解决了,我发现,pthread_cond_wait前后的锁必须是同一个才可以同时激活多线程。
也就是我这里的mutex_a和mutex_b必须是同一个,才可以用pthread_cond_broadcast同时唤醒多个线程。
不知道是不是巧合,我发现之后这样才可以。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP