码迷,mamicode.com
首页 > 编程语言 > 详细

c++多线程基础三 --- 同步并发

时间:2021-01-16 12:07:32      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:lang   表达   ffffff   sdn   技术   term   http   tps   cond   

1 条件变量

1.1 condition_variable

std::condition_variable实际上是一个类,是一个和条件相关的类;

  1. condition_variable成员函数:
    技术图片
    结合std::unique_lock<std::mutex> 使用

  2. 使用规则:
    技术图片

  3. wait 使用

    void wait( std::unique_lock<std::mutex>& lock );   (1)	
    --------------------------------------------------------
    template< class Predicate >                        (2)
    void wait( std::unique_lock<std::mutex>& lock, Predicate pred );
    
    • (1) 调用:相当于 (2)的第二个参数为false,wait()将解锁互斥量,并阻塞到本行;
    • (2) 调用:第二个参数为true,wait()直接返回并继续执行。
  4. notify_one唤醒线程

    • wait()不断尝试获取互斥量锁,如果获取不到那么流程就卡在wait()这里等待获取,如果获取到了,那么wait()就继续执行,获取到了锁
    • 如果wait有第二个参数就判断这个lambda表达式。
      a): 如果表达式为false,那wait又对互斥量解锁,然后又休眠,等待再次被notify_one()唤醒
      b): 如果lambda表达式为true,则wait返回,流程可以继续执行(此时互斥量已被锁住)。
    • 如果wait没有第二个参数,则wait返回,流程走下去。

c++多线程基础三 --- 同步并发

标签:lang   表达   ffffff   sdn   技术   term   http   tps   cond   

原文地址:https://www.cnblogs.com/lihaihui1991/p/14284584.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!