亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2155 | 回復: 2
打印 上一主題 下一主題

條件變量broadcast只能喚醒一個線程? [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-11-30 16:24 |只看該作者 |倒序瀏覽
寫一個定時任務
三個線程如下:
(alarm_fun是時間線程的鬧鐘處理函數(shù))

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上的線程。
突然發(fā)現(xiàn)每次broadcast的時候只能喚醒一個線程,另一個線程似乎永遠無法得到喚醒。




各位,幫幫忙看看問題出在什么地方。謝謝

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

論壇徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵節(jié)徽章
日期:2015-03-06 15:50:392015亞冠之大阪鋼巴
日期:2015-06-12 16:01:352015年中國系統(tǒng)架構師大會
日期:2015-06-29 16:11:2815-16賽季CBA聯(lián)賽之四川
日期:2018-12-17 14:10:21
2 [報告]
發(fā)表于 2009-11-30 16:40 |只看該作者
http://topic.csdn.net/t/20060525/14/4778210.html

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

論壇徽章:
0
3 [報告]
發(fā)表于 2009-11-30 19:05 |只看該作者

回復 #2 T-Bagwell 的帖子

謝謝,我去看看。
不過我的問題已經(jīng)解決了,我發(fā)現(xiàn),pthread_cond_wait前后的鎖必須是同一個才可以同時激活多線程。
也就是我這里的mutex_a和mutex_b必須是同一個,才可以用pthread_cond_broadcast同時喚醒多個線程。
不知道是不是巧合,我發(fā)現(xiàn)之后這樣才可以。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP