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

C++笔记之条件变量(Condition Variable)与cv.wait 和 cv.wait_for的使用

C++笔记之条件变量(Condition Variable)与cv.wait 和 cv.wait_for的使用

参考博客:C++笔记之各种sleep方法总结

code review!

文章目录

  • C++笔记之条件变量(Condition Variable)与cv.wait 和 cv.wait_for的使用
    • 1.条件变量(Condition Variable)
    • 2.cv.wait_for
    • 3.cv.wait
    • 4.cv.wait和cv.wait_for比较

1.条件变量(Condition Variable)

在这里插入图片描述

2.cv.wait_for

在这里插入图片描述

代码

#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>std::mutex mtx;
std::condition_variable cv;
bool condition = false;void waitForCondition() {std::unique_lock<std::mutex> lock(mtx);// 等待一段时间,或直到条件满足if (cv.wait_for(lock, std::chrono::seconds(3), []{ return condition; })) {std::cout << "Condition is satisfied!" << std::endl;} else {std::cout << "Timed out waiting for condition." << std::endl;}
}void notifyCondition() {std::this_thread::sleep_for(std::chrono::seconds(2)); // 模拟一些操作{std::lock_guard<std::mutex> lock(mtx);condition = true;}cv.notify_one(); // 通知一个等待的线程
}int main() {std::thread t1(waitForCondition);std::thread t2(notifyCondition);t1.join();t2.join();return 0;
}

3.cv.wait

在这里插入图片描述

代码

#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>std::mutex mtx;
std::condition_variable cv;
bool condition = false;void waitForCondition() {std::unique_lock<std::mutex> lock(mtx);cv.wait(lock, []{ return condition; }); // 等待条件满足std::cout << "Condition is satisfied!" << std::endl;
}void notifyCondition() {std::this_thread::sleep_for(std::chrono::seconds(2)); // 模拟一些操作{std::lock_guard<std::mutex> lock(mtx);condition = true;}cv.notify_one(); // 通知一个等待的线程
}int main() {std::thread t1(waitForCondition);std::thread t2(notifyCondition);t1.join();t2.join();return 0;
}

4.cv.wait和cv.wait_for比较

在这里插入图片描述

http://www.lryc.cn/news/132867.html

相关文章:

  • Dubbo之DubboBootstrap源码解析
  • SpringBoot + Vue 微人事 项目 (第八天)
  • 人工智能引领图文扫描新趋势
  • ChatGPT在智能城市规划和交通优化中的应用如何?
  • 探索Perfetto:开源性能追踪工具的未来之光
  • A*算法图文详解
  • [MySQL] — 数据类型和表的约束
  • JetBrains IDE远程开发功能可供GitHub用户使用
  • LVS 负载均衡集群
  • Mongodb Ubuntu安装
  • 【Spring Boot 源码学习】自动装配流程源码解析(下)
  • 基于微信小程序的毕业设计题目200例
  • 【数据管理】什么是数据管理?
  • [oneAPI] 手写数字识别-LSTM
  • 通过css设置filter 属性,使整个页面呈现灰度效果,让整个网页变灰
  • ahooks.js:一款强大的React Hooks库及其API使用教程(一)
  • 拟合圆算法源码(商业)
  • 第一章 IRIS 编程简介
  • Leetcode-每日一题【剑指 Offer 32 - III. 从上到下打印二叉树 III】
  • .NET应用UI组件DevExpress XAF v23.1 - 全新的日程模块
  • UBuntu18.04 Qt之双HDMI屏切换
  • c#配置提供者
  • python rtsp 硬件解码 二
  • 搭载KaihongOS的工业平板、机器人、无人机等产品通过3.2版本兼容性测评,持续繁荣OpenHarmony生态
  • AIGC音视频工具分析和未来创新机会思考
  • Mybatis——返回值(resultType&resultMap)详解
  • 多IP服务器有什么作用
  • Python-主线程控制子线程结束
  • 水电站防雷工程综合解决方案
  • 每日刷题(翻转+二分+BFS)