zoukankan      html  css  js  c++  java
  • pthread_cond_wait 信号量丢失

    服务器在使用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 don't know whether there's going to be a listener interested.

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

  • 相关阅读:
    MySQL企业常用集群图解
    MySQL常见错误类型
    MySQL 数据库增量数据恢复案例
    异地备份同步校验脚本
    python 自动化之路 day 面向对象基础
    Docker 入门
    awk知识点总结
    Linux文件管理类命令及命令别名
    Linux重定向
    Linux进程管理
  • 原文地址:https://www.cnblogs.com/westfly/p/4245055.html
Copyright © 2011-2022 走看看