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

2021-03-07 02:28

阅读:702

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

1 条件变量

1.1 condition_variable

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

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

  2. 使用规则:
    技术图片

  3. wait 使用

    void wait( std::unique_lock<:mutex>& lock );   (1)	
    --------------------------------------------------------
    template                        (2)
    void wait( std::unique_lock<: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


评论


亲,登录后才可以留言!