您当前的位置: 首页 >  ar
  • 0浏览

    0关注

    1477博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C++ std::condition_variable 是什么 有什么用 条件变量 线程同步 wait wait_for notify_one notify_all

软件工程小施同学 发布时间:2021-12-14 17:05:27 ,浏览量:0

一、总述

在C++11中,我们可以使用条件变量(condition_variable)实现多个线程间的同步操作;

当条件不满足时,相关线程被一直阻塞,

直到某种条件出现,这些线程才会被唤醒。

主要成员函数如下:

二、具体函数:  1、wait函数:

(1)wait(unique_lock &lck)

当前线程的执行会被阻塞,直到收到 notify 为止。

(2)wait(unique_lock &lck,Predicate pred)

当前线程仅在pred=false时阻塞;如果pred=true时,不阻塞。

wait()可依次拆分为三个操作:释放互斥锁、等待在条件变量上、再次获取互斥锁

2、notify_one:

notify_one():没有参数、没有返回值。

解除阻塞当前正在等待此条件的线程之一。如果超过一个,不会指定具体哪一线程。

如果没有线程在等待,则该函数不执行任何操作。

// condition_variable::notify_one
#include            // std::cout
#include              // std::thread
#include               // std::mutex, std::unique_lock
#include  // std::condition_variable

std::mutex mtx;
std::condition_variable produce,consume;

int cargo = 0;     // shared value by producers and consumers

void consumer () {
  std::unique_lock lck(mtx);
  while (cargo==0) consume.wait(lck);
  std::cout             
关注
打赏
1665320866
查看更多评论
立即登录/注册

微信扫码登录

0.0416s