首页 > 编程语言 >C++线程同步之条件变量

C++线程同步之条件变量

时间:2024-09-27 20:25:29浏览次数:1  
标签:std 同步 生产者 阻塞 C++ 互斥 线程 mutex

条件变量需要和互斥量配合起来使用,C++11提供了两种条件变量:

  1. condition_variable:需要配合std::unique_lockstd::mutex进行wait操作,也就是阻塞线程的操作。
  2. condition_variable_any:可以和任意带有lock()、unlock()语义的mutex搭配使用,也就是说有四种:
    std::mutex:独占的非递归互斥锁
    std::timed_mutex:带超时的独占非递归互斥锁
    std::recursive_mutex:不带超时功能的递归互斥锁
    std::recursive_timed_mutex:带超时的递归互斥锁

条件变量通常用于生产者和消费者模型,大致使用过程如下:

拥有条件变量的线程获取互斥量
循环检查某个条件,如果条件不满足阻塞当前线程,否则线程继续向下执行
产品的数量达到上限,生产者阻塞,否则生产者一直生产。。。
产品的数量为零,消费者阻塞,否则消费者一直消费。。。
条件满足之后,可以调用notify_one()或者notify_all()唤醒一个或者所有被阻塞的线程
由消费者唤醒被阻塞的生产者,生产者解除阻塞继续生产。。。
由生产者唤醒被阻塞的消费者,消费者解除阻塞继续消费。。。

作者: 苏丙榅
链接: https://subingwen.cn/cpp/condition/
来源: 爱编程的大丙
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:std,同步,生产者,阻塞,C++,互斥,线程,mutex
From: https://www.cnblogs.com/qwer321/p/18435745

相关文章

  • 算法速通-90题(1—完数难题)[含pyhton,java,c++]
    题目:完数难题 题目描述如下:    小明正在进行期末数学考试,现在他遇到了这样一个题:如果一个大于1的正整数的所有因子之和等于它的本身,则称这个数是完数   比如6,28都是完数:6=1+2+3 ; 28=1+2+4+7+14。请判断两个正整数之间完数的个数。小明想请聪明的你帮......
  • 广州C++信奥老师解一本通题 1919:【02NOIP普及组】选数
    ​ 【题目描述】已知nn个整数x1,x2,……xn以及一个整数K(K<n)。从n个整数中任选K个整数相加,可分别得到一系列的和。例如当n=4, k=34个整数分别为3,7,12,193,7,12,19时,可得全部的组合与它们的和为:3+7+12=223+7+19=297+12+19=383+12+19=34现在,要求你计......
  • C++ 智能指针详解: std::unique_ptr 和 std::shared_ptr
    C++11引入了智能指针,它们是管理动态分配内存的强大工具。本文将详细介绍两种最常用的智能指针:std::unique_ptr和std::shared_ptr。std::unique_ptr概述std::unique_ptr是一种独占所有权的智能指针。它确保一个对象只能被一个unique_ptr所拥有,这意味着不能复制unique_......
  • C++17 std::variant 详解:概念、用法和实现细节
    std::variant是C++17引入的一个新的标准库类型,它提供了一种类型安全的联合体。这个类可以在同一时间持有几种可能类型中的一个值。本文将详细介绍std::variant的概念、用法和实现细节。1.基本概念std::variant是一个模板类,可以存储几种不同类型中的一个值。它的声明如下:te......
  • C++离线查询
    前言C++算法与数据结构打开打包代码的方法兼述单元测试概念及原理离线算法(offlinealgorithms),离线计算就是在计算开始前已知所有输入数据,输入数据不会产生变化,且在解决一个问题后就要立即得出结果的前提下进行的计算。通俗的说:离线查询:问完所有问题后,依次回答。可......
  • 软件工程结队项目:基于C++实现的自动生成小学四则运算的命令行程序
    这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/CSGrade22-34这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13230这个作业的目标<运用C++实现四则运算法则的命令行程序>团队成员1李梓灏3122004695团队成员2吴......
  • 【C++进阶】AVL树的介绍及实现
    【C++进阶】AVL树的介绍及实现......
  • C++顺序结构(2)学习任务
    在坚果云中注册免费个人云盘一、视频下载存放在规划好的文件夹中,并观看学习1、变量存储.注释2、四则运算.输入3、认识设置DEV-C++4、第一个C++程序5、头文件6、命名空间7、cout语句8、什么是变量?9、表达式和赋值语句10、计数器11、自加自减运算符12、课后题目113、......
  • C++-练习-45
    题目:下面是一个结构声明:structbox{        charmaker[40];        floatheight;        floatwidth;        floatlength;        floatvolume;};编写一个函数,按值传递box结构,并显示每个成员的值。编写一个函数,传......
  • 【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化
    文章目录从零实现C++Vector前言1.基本结构与初始化细分1.1空构造函数的实现与测试实现代码:测试用例:输出:1.2带大小和默认值的构造函数实现代码:测试用例:输出:1.3拷贝构造函数实现代码:测试用例:输出:1.4赋值操作符的实现实现代码:测试用例:输出:2.容量管理的实现与测......