C++并发 | std::future原理
只是了解future可以异步返回一个函数的返回值,和std::packaged_task一起使用,但是不了解其中原理,上网看了一些资料做个总结^^
std::future 可以用来获取异步任务的结果,因此可以把它当成一种简单的线程间同步的手段.
通过用packaged_task和目标任务和参数打包形成的packaged_task类,我的理解是里面重载了()运算符,使对象成为可调用的仿函数,
struct st
{int val;void operator()(int x){val = x;cout << val << endl;}
};
int main()
{st s;s(1);return 0;
}
当使用get_future()方法时,返回一个future对象,因为packaged_task的成员有class _Promise
class _Promise
promise,promise对象是future对象配对兄弟,二者都能暂时拥有一个shared state (用来表现一个结果或者异常值),但是future object允许你取回数据,promise是让你提供数据。其中promise的声明位于头文件中。
,当future对象使用.get()时,会使当前线程阻塞,直到目标函数执行完毕返回函数值,其中使用acomic< unsigned>的原子对象,然后自旋等待异步线程结束
C++并发 | std::future原理相关推荐
- C++并发编程线程间共享数据std::future和sd::promise
线程间共享数据 使用互斥锁实现线程间共享数据 为了避免死锁可以考虑std::lock()或者boost::shared_mutex 要尽量保护更少的数据 同步并发操作 C++标准库提供了一些工具 可以 ...
- C++11 并发指南四(future 详解三 std::future std::shared_future)
上一讲<C++11 并发指南四(<future> 详解二 std::packaged_task 介绍)>主要介绍了 <future> 头文件中的 std::pack ...
- C++并发编程之std::async(), std::future, std::promise, std::packaged_task
c++11中增加了线程,使得我们可以非常方便的创建线程,它的基本用法是这样的: void f(int n); std::thread t(f, n + 1); t.join(); 但是线程毕竟是属于比 ...
- C++并发编程之std::future
简单地说,std::future 可以用来获取异步任务的结果,因此可以把它当成一种简单的线程间同步的手段.std::future 通常由某个 Provider 创建,你可以把 Provider 想象成 ...
- C++ 并发指南< future >(3)std::future std::shared_future
std::future介绍 简单地说,std::future 可以用来获取异步任务的结果,因此可以把它当成一种简单的线程间同步的手段. std::future 通常由某个 Provider 创建,你可 ...
- C++ 多线程:std::future
概念 我们前面介绍的std::thread 是C++11中提供异步创建多线程的工具,只能是异步运行任务,却无法获取任务执行的结果,一般都是依靠全局对象,全局对象在多线程下是及其不安全的,为此标准库提供 ...
- C++多线程std::async、std::future、std::packaged_task、std::promise
std::async std::async用于创建异步任务,实际上就是创建一个线程执行相应任务,默认立即开始执行. std::async就是异步编程的高级封装,std::async的操作,其实相当于封 ...
- C++库std::future
std::future 介绍 成员函数 作用 使用场景 异步任务 并发控制 结果获取 用法示例 使用std::async关联异步任务 使用std::promise与std::future配合 结果获取 ...
- C++11中std::future的使用
C++11中的std::future是一个模板类.std::future提供了一种用于访问异步操作结果的机制.std::future所引用的共享状态不能与任何其它异步返回的对象共享(与std::sha ...
最新文章
- 漫画:生活很苦!当你扛不下去想放弃时,一定要过来看看!
- 10、ctemplate文档,简记(3)
- 学习笔记-小甲鱼Python3学习第十五讲:字符串:格式化
- 《算法竞赛进阶指南》打卡-基本算法-AcWing 97. 约数之和:递归、快速幂
- 透过三翼鸟,看品牌背后的“有效创新”
- MyBatis 源码分析-技术分享
- 【转】MFC与.NET的区别
- 对称式加密和非对称式加密
- 51nod 1428 bzoj 1651: [Usaco2006 Feb]Stall Reservations 专用牛棚
- Android studio 真机调试出现sdk版本不匹配问题
- Go语言之高级篇beego框架之模型(Models)
- 数据结构课设——航空航天订票系统
- 储油罐的变位识别与罐容表标定
- B树、B+树、B*树
- uwp之图片旋转动画实现
- 编译原理习题——第2章 文法和语言试卷
- MacOS 11 系统电子书方案----MuMu安卓模拟器
- MySQL 推荐书目
- MySQL多表联表查询
- 计算机连网线怎么联网,电脑直接插网线上网