std::thread 三:条件变量(condition_variable())
#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())的更多相关文章
- C++11并行编程-条件变量(condition_variable)详细说明
<condition_variable >头文件主要包含有类和函数相关的条件变量. 包括相关类 std::condition_variable和 std::condition_variab ...
- C++并发编程 条件变量 condition_variable,线程安全队列示例
1. 背景 c++11中提供了对线程与条件变量的更好支持,对于写多线程程序方便了很多. 再看c++并发编程,记一下学习笔记. 2. c++11 提供的相关api 3.1 wait wait用于无条件等 ...
- Windows:C++11并发编程-条件变量(condition_variable)详解
<condition_variable >头文件主要包含了与条件变量相关的类和函数.相关的类包括 std::condition_variable和 std::condition_varia ...
- 条件变量 condition_variable wait_until
wait_until(阻塞当前线程,直到条件变量被唤醒,或直到抵达指定时间点) #include <iostream> #include <atomic> #include & ...
- 条件变量 condition_variable wait_for
wait_for(阻塞当前线程,直到条件变量被唤醒,或到指定时限时长后) #include <iostream> #include <atomic> #include < ...
- 条件变量 condition_variable wait
wait(阻塞当前线程,直到条件变量被唤醒) #include <iostream> #include <string> #include <thread> #in ...
- c++11中的线程、锁和条件变量
void func(int i, double d, const string& s) { cout << i << ", " << d ...
- C++11 多线程同步 互斥锁 条件变量
在多线程程序中,线程同步(多个线程访问一个资源保证顺序)是一个非常重要的问题,Linux下常见的线程同步的方法有下面几种: 互斥锁 条件变量 信号量 这篇博客只介绍互斥量和条件变量的使用. 互斥锁和条 ...
- linux条件变量使用和与信号量的区别
近来在项目中用到条件变量和信号量做同步时,这一块一直都有了解,但也一直没有总结,这次总结一下,给大家提供点参考,也给自己留点纪念. 首先,关于信号量和条件变量的概念可以自行查看APUE,我这直接把AP ...
- C++11并发——多线程条件变量std::condition_variable(四)
https://www.jianshu.com/p/a31d4fb5594f https://blog.csdn.net/y396397735/article/details/81272752 htt ...
随机推荐
- 06、etcd 写请求执行流程
本篇内容主要来源于自己学习的视频,如有侵权,请联系删除,谢谢. 上一节我们学习了 etcd 读请求执行流程,这一节,我们来学习 etcd 写请求执行流程. 1.etcd写请求概览 etcd 一个写请求 ...
- canal实现mysql跨机房备份
背景介绍 跨机房数据库数据备份 数据库增量异构系统分发(cache,mq等) 数据内容聚合分析组件 摘录作者的描述 原理图 canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL ...
- 笔记本linux问题记录
目录 UEFI笔记本无法引导进入操作系统 grub引导错误,无法进入系统 笔记本亮度不能保存 禁用独立显卡 KVM 解决nmcli dev 中的wlan0显示unavailable 杂项 UEFI笔记 ...
- java 考试易考识记题目(一)
笔者擅长 C# 语言,4月份要考试,学习 JAVA 是为了考试罢了. 如何在最短时间内学习 JAVA 基础语法和通过考试考核呢~ 学习 JAVA ,要为了应付考试,判断.循环这部分,C.C++.C#. ...
- 基于图数据库 NebulaGraph 实现的欺诈检测方案及代码示例
本文是一个基于 NebulaGraph 图算法.图数据库.机器学习.GNN 的 Fraud Detection 方法综述.在阅读本文了解欺诈检测的基本实现方法之余,也可以在我给大家准备的 Playgr ...
- 探索图片与Base64编码的优势与局限性
一.图片和Base64编码的关系: 图片是一种常见的媒体文件格式,可以通过URL进行访问和加载. Base64编码是一种将二进制数据转换为ASCII字符的编码方式,可以将图片数据转换为字符串形式. 图 ...
- Springboot+POI实现excel生成下载进阶版(单元格合并,多Sheet,各种样式处理)
上周五来了新的需求,基本上我写的还款那一系列流程不要了(我好悲伤,当时写了很久的,逻辑复杂的写的我很骄傲),新的变成如上所示(仅仅一部分),勾选几笔后生成一个excel表格,不同的融资编号所引发的那堆 ...
- vscode 注释后 光标下移(注释后光标快速定位下一行) 仿照idea
VSCode 注释后光标快速定位下一行 1. 安装插件 Multi-command Multi-command 2.打开 Keybinding.json Keybinding.json 左下角齿轮图标 ...
- git svn 提交代码日志填写规范 BUG NEW DEL CHG TRP gitz 日志z
git svn 提交代码日志填写规范 BUG NEW DEL CHG TRP gitz 日志z
- 已安装docker-compose,安装harbor时还是提示docker-compose未安装或者Permission denied的解决方案
安装Harbor时,下载安装了docker-compose并赋予权限 sudo curl -L "https://github.com/docker/compose/releases/dow ...