在 boost 中等待多个条件变量?

2024-01-07

我正在寻找一种等待多个条件变量的方法。 IE。就像是:

boost::condition_variable cond1;  
boost::condition_variable cond2;

void wait_for_data_to_process()  
{  
    boost::unique_lock<boost::mutex> lock(mut);

    wait_any(lock, cond1, cond2); //boost only provides cond1.wait(lock);

    process_data();
}

条件变量可以实现类似的效果吗?如果没有,是否有替代解决方案?

Thanks


我不相信你可以用 boost::thread 做这样的事情。也许是因为 POSIX 条件变量不允许这种类型的构造。当然,Windows 有 WaitForMultipleObjects,如 aJ 发布的,如果您愿意将代码限制为 Windows 同步原语,这可能是一个解决方案。

另一种选择是使用更少的条件变量:只有 1 个条件变量,当任何“有趣”的事情发生时触发。然后,每当您想要等待时,您都可以运行一个循环来检查是否出现了您感兴趣的特定情况,如果没有出现,则返回等待条件变量。无论如何,您应该在这样的循环中等待这些条件变量,因为条件变量等待会受到虚假唤醒的影响(来自 boost::thread 文档,重点是我的):

void wait(boost::unique_lock<boost::mutex>& lock)
...
Effects:
原子调用lock.unlock()并阻塞当前线程。当调用通知时,线程将解除阻塞this->notify_one() or this->notify_all(),或虚假。 ...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 boost 中等待多个条件变量? 的相关文章

随机推荐

  • 评估骰子滚动符号字符串

    Rules 编写一个接受字符串作为参数的函数 返回 表达式的评估值骰子记数法 http en wikipedia org wiki Dice notation 包括加法和乘法 为了澄清问题 这里是法律表达式的 EBNF 定义 roll po
  • 使用 Python 从文本中提取 IBAN

    我想用 Python 从文本中提取 IBAN 号码 这里的挑战是 IBAN 本身可以用多种方式编写 数字之间有空格 我发现很难将其转换为有用的正则表达式模式 我写了一个演示版 https regex101 com r PRDDaT 1它尝试
  • 使用 LINQ 进行编码是如何工作的?幕后发生了什么?

    例如 m lottTorqueTools From t In m lottTorqueTools Where Not t SlotNumber toolTuple SlotNumber And Not t StationIndex tool
  • java.lang.RuntimeException: android.database.sqlite.SQLiteException: 没有这样的表: media_store_extension (代码 1): ,

    我在 2021 年 10 月之后在 Play 商店上发布我的应用程序时遇到问题 错误表明该表media store extension不存在 问题是 我在项目中没有使用 SQLITE 所以我不知道是什么导致了这个异常 目标 sdk 是 30
  • 当单词不存在时,将 0 分配给某些单词

    这是我在 stackoverflow 上发表的第一篇文章 我对编码还比较陌生 所以 请耐心听我说 我正在做一个实验 有两组数据文档 文档1如下 TOPIC topic 0 5892 0 site 0 0371690427699 Intern
  • GLSL 着色器:在两个以上纹理之间进行插值

    我已经在 OpenGL 中实现了高度图 目前它只是一个正弦 余弦弯曲地形 目前我正在白色的 冰 和较暗的 石头 纹理之间进行插值 这是这样完成的 color mix texture2D ice layer tex texcoord text
  • 如何从给定的父节点获取所有子节点?

    我有一个父 子 ID 列表 并且希望获取给定父 ID 的所有子 ID 不存在空父级 顶级 ID 不会显示为子 ID 目前 父 子 ID 被记录为列表中的 KeyValuePair 但是如果更好的话 可以轻松更改为其他数据结构 List
  • aspnet 的最大值:MaxHttpCollectionKeys

    我有一个发布相当大数据的表单 但出现此错误 InvalidOperationException Operation is not valid due to the current state of the object System Web
  • JPanel 错误 - J 组件无法解析

    我有 JRE 系统库 JRE 1 8 x 库 我的线路出现错误 错误 无法解析类型 javax swing JComponent 它是从所需的 class 文件间接引用的 我怎样才能消除这个错误 这是屏幕截图 http i60 tinypi
  • 框架的私有模块映射

    我在用着这个答案 https stackoverflow com a 25250520 849645创建模块映射来为 CommonCrypto 创建模块 以便我可以在框架中使用它 然而 这样做意味着我使用此框架的任何项目都可以通过以下方式访
  • .NET 4.5 文件读取性能同步与异步

    我们正在尝试测量使用同步方法与异步方法读取一系列文件之间的性能 原本期望两者之间的时间大致相同 但结果发现使用异步大约慢 5 5 倍 这可能是由于管理线程的开销造成的 但只是想知道您的意见 也许我们只是测量了错误的时间 这些是正在测试的方法
  • 使用 INDEX/MATCH 进行三维查找

    这是从已被删除的问题中采取并稍微改进的 对于那些可以看到已删除帖子的人 该帖子摘自此处 https stackoverflow com questions 39793322 Three Dimensional lookup no conca
  • Spring REST - 创建 ZIP 文件并将其发送到客户端

    我想创建一个 ZIP 文件 其中包含从后端收到的存档文件 然后将此文件发送给用户 两天来我一直在寻找答案 但找不到合适的解决方案 也许你可以帮助我 目前 代码是这样的 我知道我不应该在 Spring 控制器中完成所有操作 但不要关心这一点
  • 如何在 Java GridLayout 中使用边距和填充

    如何防止 JLabel 显示与框架侧面齐平 我在使用 GridLayout 或 BoxLayout 时遇到同样的问题 这是发生这种情况的示例 JPanel content new JPanel content setLayout new B
  • 导入角度组件以在所有模块中可用

    我最近开始使用 Angular 2 到目前为止我的体验非常棒 我有一些很好的经验ng1 and React以及 所以 这更像是一个普遍问题 也是一个困惑 我很确定这会帮助很多其他人 但我还没有真正找到任何直接的答案 所以假设我有这个modu
  • 实体框架重复对象和所有子属性

    结构示例 public class Page public int PageId get set public string Prop1 get set public string Prop2 get set public virtual
  • Codeigniter:语言文件中的变量/配置项

    我有一个语言文件 其中包含一长串用于我的视图文件的字符串 我的问题是如何将变量或配置项传递到语言文件
  • “const id”的行为

    我正在研究 99 Haskell 问题 并看到了查找列表最后一个元素的解决方案 myLast foldr1 const id 的类型const is a gt b gt a但那个const id is b gt a gt a那么这里有什么魔
  • Build.gradle:对“项目”的访问超出了其访问权限

    常量 gradle project ext minSdkVersion 19 compileSdkVersion 28 targetSdkVersion 28 buildToolsVersion 28 0 3 supportLibraryV
  • 在 boost 中等待多个条件变量?

    我正在寻找一种等待多个条件变量的方法 IE 就像是 boost condition variable cond1 boost condition variable cond2 void wait for data to process bo