pthread_cond_wait 信号量丢失_weixin_30814223的博客-程序员秘密

服务器在使用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类的信号量,其实现是队列,能够保证不丢信号,当然有资料说,其系统调用的开销也很大。

转载于:https://www.cnblogs.com/westfly/p/4245055.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30814223/article/details/98787217

智能推荐

Hive的三种调用方式_zj575833536的博客-程序员秘密

一、hive -e ‘sql语句’ (shell命令)适合比较短的sql语句调用,优点是可以直接在shell中调用 静音模式 -S 在执行HiveQL过程中,不在显示器输出MR的执行过程hive -S -e ‘sql语句’ > test.txt 将执行结果直接输入到本地文件二、hive -f sql.sql (shell命令)适合比较长的sql语句,可以直接在shell中调用可以直接修改

arcpy脚本工具开发:批量合并文件地理数据库(gdb)_周实的博客-程序员秘密

基于ArcGIS的arcpy脚本工具开发之批量合并文件地理数据库(gdb),该工具可以批量将同一个文件夹下的所有文件地理数据库(gdb)合并成一个拥有相同名称要素类的文件地理数据库。

【论文】Neural Graph Collaborative Filtering 论文解读_地瓜没有花的博客-程序员秘密

这里写目录标题1. 前言2. 背景和动机1. 前言文献的题目: Neural Graph Collaborative Filtering(神经图协同过滤)来源: SIGIR 2019 作者: 中国科学技术大学北京研究院(北京中科研究院)_何向南教授这是何向南教授团队在SIGIR2019发表的一篇文章,据说是首次提出图协同过滤的概念。为了解决传统的方法主要通过user或item的pre-existing fetures的映射得到user和item的embedding,而缺乏了user和it

CSDN写文章更改图片大小_杨杨杨Garrick的博客-程序员秘密

找了很多方法,有一些不知道为什么有的不能用了,这个还能用写博客的时候,会经常插入一些图片,但有时候我们会插入一些像素比较小的图片,插入的图片都是默认格式,像素小的图片放大时有时会失帧,看起来很不舒服,例如:方法一:图片底部都会有一个链接,而我们需要的,就是这一段url &lt;img src="https://img-blog.csdnimg.cn/20200717174024833.png" width="20%"&gt;效果:...

华为deepin下eclipse中部署tomcat出现的问题(非安装过程)_燃梅的博客-程序员秘密

问题复现1、选择eclipse-&gt;Window-&gt;Preference2、Server下的Runtime Enviroments3、点击右边的add4、出现类似Unknown version of Tomcat was specified情况解决方案1、打开终端(ctrl+alt+T)2、进入tomcat安装目录(注意进入的是根目录及bin的上一级目录)cd /ho...

随便推点

github上排名一百的OC项目_oc sdk排行榜_稻田里的稻草人的博客-程序员秘密

项目名称项目信息1. AFNetworking作者是 NSHipster 的博主, iOS 开发界的大神级人物, 毕业于卡内基·梅隆大学, 开源了许多牛逼的项目, 这个便是其中之一, AFNetworking 采用 NSURLConnection + NSOperation, 主要方便与服务端 API 进行数据交换, 操作简单, 功能强大, 现在许多人都用它取代 A

微服务架构-SpringCloudAlibaba-094:本地负载均衡器与opefeign声明式客户端调用工具_竞风之翼的博客-程序员秘密

094:本地负载均衡器与opefeign声明式客户端调用工具1 回顾上节课内容负载均衡器2 本地负载均衡与Nginx区别3 @LoadBalanced结合Rest4 使用LoadBalancedClient实现负载5 LoadBalanced实现的原理6 openfeign客户端与feign客户端区别7 如何采用idea构建微服务架构项目8 使用openfeign客户端调用微服务接口9 openfeign客户端调用命名规范1 回顾上节课内容负载均衡器课程内容:本地负载均衡器基本概念本地负载均衡器与

Session的常用方法_session方法_JJ的博客-程序员秘密

1.request.getSession(true)若存在会话就返回一个会话,不存在就创建一个.返回值为HttpSessionsession.invalidate();这个方法就是将session中的变量全部清空session.setAttribute(key,value);设置属性 key ,valuesession.getAttribute(key);获取key的值5.session.removeAttribute(key);删除属性为key的值6.

禁止ScrollView在子控件的布局改变时自动滚动的的方法_fengyongge_的博客-程序员秘密

今天遇到一个问题就是,在scrollview中包裹一个gridview,但是总获取gridview的焦点,由于内容一页显示不完整,页面会自动滑动到最后。在网上看了下都说将可能自动滑动的childview的focus禁掉,防止它滑动,contentTextBox.setFocusable(false);试了下不行,最后重写了scrollview然后,重写scrollview中的如下方法,并将

PostgreSQL 代码生成工具选择_doris_d的博客-程序员秘密

考察了动软代码生成器、MyGeneration、Keelkit、Gentle.NET、CodeSmith、EntitysCodeGenerate,基本原则是支持PostgreSQL且易于使用,最终选定EntitysCodeGenerate。

linux下添加路由的方法_weixin_33922670的博客-程序员秘密

Linux中增加软路由的两种方法第一种:route add -net 172.16.6.0 netmask 255.255.255.0 gw 172.16.2.254 dev eth0/* 增加一条网络172.16.6.0/24 经过172.16.2.254 eth0 *//* -net增加网络 -host增加主机 netmask 子网掩码 gw 网关 dev 装置,设备,这里是你的网卡名*/ro...

推荐文章

热门文章

相关标签