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

【C++】学习记录--condition_variable 的使用

  1. condition_variable使用步骤如下:
  2. 创建一个condition_variable对象
  3. 创建一个互斥锁mutex对象,用来保护共享资源的访问
  4. 在需要等待条件变量的地方,使用unique_lock<mutec>对象锁定互斥锁并调用condition_variable::wait()、condition_variable::wait_for()或condition_variable::wait_until()函数等条件变量
  5. 在其他线程中通知等待的线程时,调用condition_variable::notify_one()或condition_variable::notify_all()函数通知等待的线程

生产者与消费者模型

代码示例:

#include<iostream>
using namespace std;
#include <thread>
#include <mutex>
#include <condition_variable>
#include <queue>mutex g_mutex;
condition_variable g_cv;
queue<int>g_queue;void Producer() {for (int i = 0; i < 10; i++){unique_lock<mutex>lock(g_mutex);g_queue.push(i);cout << "Producer: prodeced " << i << endl;g_cv.notify_one();this_thread::sleep_for(chrono::milliseconds(100));}
}void Consumer() {while (true){unique_lock<mutex>lock(g_mutex);g_cv.wait(lock, []() {return !g_queue.empty(); });int value = g_queue.front();g_queue.pop();cout << "Consumer: consumed " << value << endl;}
}int main()
{thread producer_thread(Producer);thread consumer_thread(Consumer);producer_thread.join();consumer_thread.join();system("pause");system("cls");
}

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

相关文章:

  • Linux之时间子系统(四): tick 层模块(periodic 和dynamic )
  • Docker Command
  • Linux系统部署Paperless-Ngx文档管理系统结合内网穿透实现公网访问
  • 6.shell case控制语句
  • 如何判断HDMI接口版本是1.4还是2.0呢?
  • 【开发环境搭建篇】NodeJS的安装和配置
  • 【Docker】docker和docker-compose一键安装脚本(linux)
  • 在 Windows 中安装配置并启动运行 Jenkins【图文详细教程】
  • C# 读取txt文本所有行
  • STM32使用常见错误合集(正在更新版)
  • Java Random类
  • 【Spring Cloud】微服务通信概述
  • MySQL的概述与安装
  • 《被讨厌的勇气》书摘2
  • 基于SpringBoot的会员制医疗预约服务管理信息系统
  • 【二十三】【算法分析与设计】三柱汉诺塔详解,计算子移动次数,正常递归计算,观察数据得出数学规律,递归图得出数学规律,将递归函数转化为递推式
  • C# WPF编程-XAML
  • java 高级面试题(借鉴)(下)
  • C++测试代码
  • Flask python 开发篇:蓝图的使用
  • 抖音视频爬虫下载软件|可导出视频分享链接|视频批量采集工具
  • CentOS DHCP服务器部署指南
  • llvm后端
  • 【JSON2WEB】10 基于 Amis 做个登录页面login.html
  • Android 你遇到的无障碍onGesture不执行
  • Java学习10
  • 第二十章 TypeScript(webpack构建ts+vue3项目)
  • 白酒:陈酿过程中的老熟度评价与品质提升方法
  • BoostSeacher
  • 我的算法刷题笔记(3.18-3.22)