一、定义:
1.1、解释:

条件变量是利用线程间共享的变量进行同步的一种机制,是在多线程程序中用来实现"等待–>唤醒"逻辑常用的方法,用于维护一个条件(与是条件变量不同的概念),线程可以使用条件变量来等待某个条件为真,注意理解并不是等待条件变量为真。

当条件不满足时,线程将自己加入等待队列,同时释放持有的互斥锁; 当一个线程唤醒一个或多个等待线程时,此时条件不一定为真(虚假唤醒)。

1.2、个人理解:
两个线程利用条件变量及互斥锁实现同步。条件变量和互斥锁对两个线程来说是全局的
一个线程利用条件变量实现等待,同时释放锁;
一个线程获取锁后利用该条件变量唤醒等待的线程。

二、用法:
2.1、std::condition_variable::wait

1、void wait (unique_lock<mutex>& lck);

对应线程让自己挂起并释放锁

2、template <class Predicate> void wait (unique_lock<mutex>& lck, Predicate pred);

若pred为false则对应线程挂起并释放锁,直到被唤醒,唤醒后再判断pred,若为false则继续挂起,直到被唤醒同时条件为true。
相当于: while (!pred()) wait(lck);

3、std::condition_variable::notify_one

发送通知以唤醒等待队列中的线程。

4、template <class Rep, class Period> cv_status wait_for (unique_lock<mutex>& lck, const chrono::duration<Rep,Period>& rel_time);

等待直到被唤醒或超时,返回值为超时与否。其同样有另一种重载形式,与(2)类似。

三、总结:
1、注意区分条件变量与条件:条件变量是用于同步的机制,条件是条件变量控制函数执行或等待的判断依据。
2、wait的两个重载方法,区别是等待时是否判断条件。

参考资料:
1、 线程间同步方式详解
2、 CPP

条件变量(condition_variable)相关推荐

  1. 标准化条件变量 -- condition_variable

    std::condition_variable是条件变.Linux下使用 Pthread库中的 pthread_cond_*() 函数提供了与条件变量相关的功能.和pthread_cond_*()一样 ...

  2. c语言怎么定义一个条件变量,C++ 条件变量(condition_variable)

    先贴一个condition_variable的讲解:https://en.cppreference.com/w/cpp/thread/condition_variable,很详细也很全面,但是是英文的 ...

  3. 条件变量----condition_variable

    概念 互斥量是多线程间同时访问某一共享变量时,保证变量可被安全访问的手段.但单靠互斥量无法实现线程的同步.线程同步是指线程间需要按照预定的先后次序顺序进行的行为.C++11对这种行为也提供了有力的支持 ...

  4. C++11 condition_variable条件变量用法

    C++11 condition_variable条件变量用法 1 什么是条件变量 2 condition_variable类定义 2.1 wait函数 3 condition_variable用法 3 ...

  5. 调用另一个cpp的变量_再谈条件变量—从入门到出家

    再谈条件变量-从入门到出家 C语言--条件变量 条件变量是在线程中以睡眠的方式等待某一条件的发生: 条件变量是利用线程间共享的全局变量进行同步的一种机制: 一个线程等待"条件变量的条件成立& ...

  6. 再谈条件变量—从入门到出家

    再谈条件变量-从入门到出家 C语言--条件变量 条件变量是在线程中以睡眠的方式等待某一条件的发生: 条件变量是利用线程间共享的全局变量进行同步的一种机制: 一个线程等待"条件变量的条件成立& ...

  7. C++ 多线程:条件变量 std::condition_variable

    文章目录 描述 使用 描述 头文件<condition_variable> 定义 class condition_variable; 简介 之前我们也已经介绍过了C++多线程中互斥变量存在 ...

  8. 【多线程】1.条件变量--std::condition_variable

    条件变量允许我们通过通知进而实现线程同步. 因此,您可以实现发送方/接收方或生产者/消费者之类的工作流. 在这样的工作流程中,接收者正在等待发送者的通知.如果接收者收到通知,它将继续工作. 1. st ...

  9. C++并发中的条件变量 std::condition_variable

    简介 这个操作相当于操作系统中的Wait & Signal原语,程序中的线程根据实际情况,将自己阻塞或者唤醒其他阻塞的线程. 个人认为,条件变量的作用在于控制线程的阻塞和唤醒,这需要和锁进行相 ...

最新文章

  1. 多个线程访问统一对象的不同方法_不会多线程还想进BAT?精选19道多线程面试题,有答案边看边学...
  2. 音视频开发(15)---IPC+NVR+路由器+ffmpeg+nginx实现网页/Android/IOS的HLS直播
  3. python3.7 matplotlib增加坐标说明_python matplotlib:如何在极坐标图中的轴和刻度标签之间插入更多空格?...
  4. osea/ introduction
  5. 用计算机画函数图像教案,函数的图像的教案
  6. 新政下北京公积金额度难改 组合贷多被拒绝
  7. 小米电视怎么看CCTV?安装超好用的HDP直播来帮助你
  8. pregnant用法
  9. 洛谷 P4883 mzf的考验 解题报告
  10. 马云豪掷三千亿,你又如何能分到100个月季度奖?
  11. [Mysql] FIND_IN_SET函数
  12. 使用谷歌的服务器训练
  13. 怎么说离职原因新的公司比较能接受?
  14. v-distpicker 插件只要省市
  15. 计算机 国际顶尖级会议排名,计算机学科国际会议排名.doc
  16. Java中IO流-21-图片加密简单实现
  17. EtherCAT总线伺服电机/一体化伺服电机如何清零当前位置
  18. zsh: command not found: ifconfig
  19. 心理咨询网站php源码,XYCMS心理咨询中心建站系统 v4.1
  20. 【zlmediakit】windows cmake +vs 构建

热门文章

  1. java --- BaseColor颜色处理(PDF)
  2. 何时用put,get,post
  3. 手机备忘录怎么打出对勾符号
  4. 欧洲多国对 ChatGPT 展开调查;高通被韩国罚款超50亿;能用ChatGPT 来炒股了?丨每日大事件...
  5. android+水滴粘性动画,纯css实现Material Design中的水滴动画按钮
  6. 3D旋转相册+背景音乐
  7. 信息系统项目管理师(2022年)—— 重点内容:项目组合管理(19)
  8. cc攻击怎么防御,如何防止cc攻击?
  9. 计算机在平面设计上的应用,计算机辅助设计在平面设计中的应用
  10. 2020最新中国上市公司市值500强:阿里腾讯领跑,百度掉出前20!