当前位置: 首页 > news >正文

【C/C++】Linux C++ wait_for 的原理

monitor_cv_.wait_for 的工作原理:

  1. 当条件满足时(即 lambda 表达式返回 true),程序会立即向下执行,不会继续等待。
  2. 在等待期间,程序确实会不断检查 lambda 表达式中的条件,即使没有 notify()。

具体来说,wait_for 的工作机制如下:

  1. 首先检查 lambda 表达式(predicate)是否为 true
  2. 如果为 true,则立即返回并继续执行后续代码
  3. 如果为 false,则进入等待状态,但会在两种情况下唤醒:
    • 超过指定的时间间隔(这里是 m_monitor_check_interval_ms)
    • 被其他线程的 notify() 唤醒
  4. 如果超时(超过了指定的时间间隔)会继续往下执行
    如果是被notify了,先检查 predicate 条件,如果不满足,则继续wait直到超时,如果满足,则跳出等待,立马往下执行。

在等待过程中,系统会周期性地检查 predicate 条件,而不是完全阻塞。这使得即使没有显式的 notify() 调用,当条件变为 true 时,程序也能及时响应并继续执行。

这种设计的好处是既保证了及时响应条件变化,又避免了忙等待(busy-waiting),提高了系统效率。

 

// 无论什么情况,都等待一段时间(会被notify提前唤醒)
monitor_cv_.wait_for(lock, m_monitor_check_interval_ms, [this]() {// 只有当 predicate 返回 false 时才真正等待CIAS_PRINT_DEBUG("[Thread-transmissionMonitorThread]interval=%ld ms", m_monitor_check_interval_ms.count());return !transmission_monitoring_.load()||!data_buffer_.isEmpty()||is_notify_faster_trigger.load();// 超时或被 notify 唤醒后,不会再检查 predicate
});

在您提供的代码片段中,lambda 表达式检查三个条件:

  • !transmission_monitoring_.load() - 传输监控是否停止
  • !data_buffer_.isEmpty() - 数据缓冲区是否有数据
  • is_notify_faster_trigger.load() - 是否触发了更快的检查

只要这三个条件中任何一个为 true,程序就会立即继续执行,而不需要等待完整的超时时间。

 

http://www.jsqmd.com/news/90058/

相关文章:

  • 暗黑破坏神2存档编辑工具:全方位角色定制解决方案
  • Bilibili-Evolved终极指南:解锁你的专属B站体验
  • Vue 页面频繁重渲染,性能为什么这么差?
  • OnmyojiAutoScript终极指南:2025年阴阳师自动化脚本完全配置手册
  • wvp-GB28181-pro终极指南:3分钟完成Docker容器化部署
  • PiliPlus终极体验指南:解锁B站第三方客户端的完整功能指南
  • Zotero-GPT插件API配置全流程解析与故障排查
  • GridPlayer多视频同步播放器:专业级分屏播放解决方案
  • 关于 AI 软件测试,你必须知道的 5 个惊人真相
  • 网盘直链下载助手:解锁高速下载的实用技巧
  • 环世界性能优化终极指南:如何让后期游戏告别卡顿重获新生
  • Pyarmor解密工具:无需运行即可静态解密Python加密脚本的终极方案
  • 如何快速掌握BetterNCM安装器:音乐爱好者的终极工具指南
  • 照片元数据管理革命:ExifToolGui如何让专业操作变得像刷朋友圈一样简单
  • 7个Maccy剪贴板管理器使用技巧:从新手到高手快速上手
  • 心电图AI分析终极指南:基于深度学习的完整解决方案
  • livox mid-70采集点云数据
  • PlugY插件:暗黑破坏神2单机体验的革命性增强
  • Pyarmor-Static-Unpack-1shot:无需运行即可处理加密Python脚本的解决方案
  • 报错分析:注册通知例程达上限
  • 哔哩下载姬DownKyi:打造个人专属B站内容宝库的终极方案
  • Calibre-Douban插件:一键获取豆瓣图书元数据的终极解决方案
  • Cursor AI Pro功能全解锁:3步突破试用限制的实战指南
  • TrafficMonitor插件系统:打造个性化Windows任务栏监控中心的完整指南
  • 基于Springboot学校物资管理系统【附源码+文档】
  • LumenPnP开源贴片机:解决小批量电子组装难题的智能方案
  • 百度网盘第三方客户端终极方案:告别限速的完整指南
  • AutoGPT水质检测报告生成器
  • GmsCore架构解构:从依赖注入到权限控制的逆向工程
  • Free-NTFS-for-Mac完全指南:苹果电脑免费读写NTFS磁盘终极方案