condition_variable  、  wait   、  notify_one   、  notify_all
*:notify_one:通知(唤醒)一个线程
*:notify_all:通知(唤醒)多个线程
#include <iostream>
#include <thread>
#include <mutex>
#include <list>
using namespace std; class A
{
public:
void inNum()
{
for (int i = 0; i < 10000; i++)
{
std::cout << "写入一个数据:" << i << std::endl; std::unique_lock<std::mutex> m_lock(m_mutex);
m_num_list.push_back(i);
m_cond.notify_one(); // 唤醒wait()
}
} void outNum()
{
while (true)
{
std::unique_lock<std::mutex> m_lock(m_mutex); // wait() 用来等待一个东西
// 如果第二个参数lambda表达式,返回false,那么wait将解锁互斥量,并阻塞到本行,等到其他线程调用notify_one()成员为止
// 如果wait()没有第二个参数,那么效果就跟第二个参数返回false的效果一样
m_cond.wait(m_lock, [this] {
if (!m_num_list.empty()) { return true; }
return false;
}); int num = m_num_list.front();
m_num_list.pop_front();
m_mutex.unlock(); // 提前解锁,让其他线程可以获取到锁,提高效率
std::cout << "读取到数据了:" << num << std::endl; if (num == 9999) { break; }
}
} private:
std::mutex m_mutex;
std::list<int> m_num_list;
std::condition_variable m_cond; // 生成一个条件变量对象
}; int main()
{
A a;
std::thread t1(&A::inNum, &a);
std::thread t2(&A::outNum, &a); t1.join();
t2.join(); return 0;
}

std::thread 三:条件变量(condition_variable())的更多相关文章

  1. C++11并行编程-条件变量(condition_variable)详细说明

    <condition_variable >头文件主要包含有类和函数相关的条件变量. 包括相关类 std::condition_variable和 std::condition_variab ...

  2. C++并发编程 条件变量 condition_variable,线程安全队列示例

    1. 背景 c++11中提供了对线程与条件变量的更好支持,对于写多线程程序方便了很多. 再看c++并发编程,记一下学习笔记. 2. c++11 提供的相关api 3.1 wait wait用于无条件等 ...

  3. Windows:C++11并发编程-条件变量(condition_variable)详解

    <condition_variable >头文件主要包含了与条件变量相关的类和函数.相关的类包括 std::condition_variable和 std::condition_varia ...

  4. 条件变量 condition_variable wait_until

    wait_until(阻塞当前线程,直到条件变量被唤醒,或直到抵达指定时间点) #include <iostream> #include <atomic> #include & ...

  5. 条件变量 condition_variable wait_for

    wait_for(阻塞当前线程,直到条件变量被唤醒,或到指定时限时长后) #include <iostream> #include <atomic> #include < ...

  6. 条件变量 condition_variable wait

    wait(阻塞当前线程,直到条件变量被唤醒) #include <iostream> #include <string> #include <thread> #in ...

  7. c++11中的线程、锁和条件变量

    void func(int i, double d, const string& s) { cout << i << ", " << d ...

  8. C++11 多线程同步 互斥锁 条件变量

    在多线程程序中,线程同步(多个线程访问一个资源保证顺序)是一个非常重要的问题,Linux下常见的线程同步的方法有下面几种: 互斥锁 条件变量 信号量 这篇博客只介绍互斥量和条件变量的使用. 互斥锁和条 ...

  9. linux条件变量使用和与信号量的区别

    近来在项目中用到条件变量和信号量做同步时,这一块一直都有了解,但也一直没有总结,这次总结一下,给大家提供点参考,也给自己留点纪念. 首先,关于信号量和条件变量的概念可以自行查看APUE,我这直接把AP ...

  10. C++11并发——多线程条件变量std::condition_variable(四)

    https://www.jianshu.com/p/a31d4fb5594f https://blog.csdn.net/y396397735/article/details/81272752 htt ...

随机推荐

  1. 【Azure 应用服务】登录App Service 高级工具 Kudu站点的 Basic Auth 方式

    问题描述 从Azure App Service的页面中,直接跳转到高级管理工具Kudu站点(https://<your app service name>.scm.chinacloudsi ...

  2. 【Azure 应用服务】[App Service For Linux(Function) ] Python ModuleNotFoundError: No module named 'MySQLdb'

    问题描述 在使用Azure Function创建新的Python Function时,使用MySQLdb连接数据库时候出现 ModuleNotFoundError: No module named ' ...

  3. STL-vector模拟实现

    #pragma once #include<assert.h> #include<iostream> using std::cout; using std::endl; usi ...

  4. C++ //栈 stack 容器 先进后出 不允许遍历

    1 //栈 stack 容器 先进后出 不允许遍历 2 3 4 #include<iostream> 5 #include<stack> 6 7 using namespace ...

  5. Rsync 备份服务搭建

    Rsync 备份服务搭建 目录 Rsync 备份服务搭建 一. 前言 二. rsync 和 sersync 2.1 rsync 基本语法 2.2 本地文件传输 2.3 ssh 远程文件传输 2.4 基 ...

  6. Spring事务(二)-@Transactional注解

    上一节说了Spring的事务配置,其中,声明式事务配置里有5种配置方式, @Transactional注解应该是最为常用的一种方式了.这一节就说说@Transactional注解. @Transact ...

  7. 【风控算法】二、SQL->Python->PySpark计算KS,AUC及PSI

    KS,AUC 和 PSI 是风控算法中最常计算的几个指标,本文记录了多种工具计算这些指标的方法. 生成本文的测试数据: import pandas as pd import numpy as np i ...

  8. 单词本z develop vel = 到上面 从下面到上面的一种过程 抽象是相对从无到有

    单词本z develop vel = 到上面 从下面到上面的一种过程 抽象是相对从无到有 develop 发展 开发 de = down 下面 velop 这里 vel 就是 lev的反写 op = ...

  9. 灰度发布、蓝绿部署、金丝雀发布和AB测试及在k8s中的实现

    灰度发布.蓝绿部署.金丝雀发布和AB测试都是软件开发和部署中常用的策略,每种策略都有其特定的用途和优势.下面是对这些策略的简要解释: 灰度发布(Grayscale Release): 灰度发布是一种逐 ...

  10. springboot listener、filter登录实战

    转载自: www.javaman.cn 博客系统访问: http://175.24.198.63:9090/front/index 登录功能 1.前端页面 采用的是layui-admin框架,文中的验 ...