码迷,mamicode.com
首页 > 其他好文 > 详细

pthread_cond_wait 信号量丢失

时间:2015-01-23 21:20:29      阅读:192      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!