首页 > 其他 > 详细

pthread_cond_wait 信号量丢失

时间:2015-01-23 21:19:24      阅读:512      评论:0      收藏:0      [点我收藏+]

服务器在使用pthread_cond_wait的时候遇到一个问题。具体描述如下

一个主进程,给n个从线程发送计算请求,主进程会等待n个线程返回,在执行下一步

从线程计算完毕后,最后一个线程会通知主线程。如下是示意性代码

main_process()
{
 
       for(int i = 0; i < n; ++i)
       {
              pthread_create(pid, slave_thread, &notify)
        }
        notify.lock_and_wait();
}

void slaver_thread()
{
      if(some_guard_value == 0)
{ notify
->signal(); } }

在实际中,当有n==1,时,并且计算任务不密集时,最后一个线程很快的signal了,main_process中还没有执行到lock_and_wait中,最终main_thread会阻塞在此处。

如果lock_and_wait中执行的是带超时的,则应该很快返回的任务,最坏情况下的才得到返回。

在stackoverflow中对此有描述,pthread_cond_wait versus semaphore

 And if you cond_signal a condvar with nobody waiting on it then nothing happens.
This is good if you dont know whether theres going to be a listener interested.

一个潜在的解决方案是利用sem_xxx类的信号量,其实现是队列,能够保证不丢信号,当然有资料说,其系统调用的开销也很大。

pthread_cond_wait 信号量丢失

原文:http://www.cnblogs.com/westfly/p/4245055.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!