C++ 条件变量condition_variable的例子
C++标准库对条件变量有两套实现:std::condition_variable
和 std::condition_variable_any
。 这两个实现都包含在 <condition_variable>
头文件的声明中。 两者都需要与一个互斥量一起才能工作(互斥量是为了同步); 前者仅限于与 std::mutex 一起工作, 而后者可以和任何满足最低标准的互斥量一起工作, 从而加上了_any的后缀。
直接上代码:
#include <memory> #include <thread> #include <chrono> #include <mutex> #include <condition_variable> class conditionTest { public: conditionTest() { m_th = std::thread(std::bind(&conditionTest::MyThreadLoop, this)); m_th2 = std::thread(std::bind(&conditionTest::MyThreadLoop2222, this)); } ~conditionTest() { } void MyThreadLoop() { while (1) { std::this_thread::sleep_for(std::chrono::milliseconds(1000)); std::unique_lock<std::mutex> locker(_mutex); mmmm++; printf("MyThreadLoop AAAAAAAAAAAAAAAAAA mmmm:%d \n", mmmm); conTTT.notify_one(); } } void MyThreadLoop2222() { while (1) { std::this_thread::sleep_for(std::chrono::milliseconds(1)); std::unique_lock<std::mutex> locker(_mutex); conTTT.wait(locker); // 这里会先解锁(允许别人加锁),再进入等待状态。 printf("MyThreadLoop2222 BBBBBBBBBBBBBBBBBB mmmm:%d \n", mmmm); std::this_thread::sleep_for(std::chrono::milliseconds(10)); } } std::thread m_th; std::thread m_th2; std::mutex _mutex; std::condition_variable_any conTTT; int mmmm = 0; }; int main() { conditionTest tt; system("pause"); return 0; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
2023-09-23 记录一些常用的指令