只是了解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原理相关推荐

  1. C++并发编程线程间共享数据std::future和sd::promise

    线程间共享数据 使用互斥锁实现线程间共享数据 为了避免死锁可以考虑std::lock()或者boost::shared_mutex 要尽量保护更少的数据 同步并发操作 C++标准库提供了一些工具 可以 ...

  2. C++11 并发指南四(future 详解三 std::future std::shared_future)

    上一讲<C++11 并发指南四(<future> 详解二 std::packaged_task 介绍)>主要介绍了 <future> 头文件中的 std::pack ...

  3. C++并发编程之std::async(), std::future, std::promise, std::packaged_task

    c++11中增加了线程,使得我们可以非常方便的创建线程,它的基本用法是这样的: void f(int n); std::thread t(f, n + 1); t.join(); 但是线程毕竟是属于比 ...

  4. C++并发编程之std::future

    简单地说,std::future 可以用来获取异步任务的结果,因此可以把它当成一种简单的线程间同步的手段.std::future 通常由某个 Provider 创建,你可以把 Provider 想象成 ...

  5. C++ 并发指南< future >(3)std::future std::shared_future

    std::future介绍 简单地说,std::future 可以用来获取异步任务的结果,因此可以把它当成一种简单的线程间同步的手段. std::future 通常由某个 Provider 创建,你可 ...

  6. C++ 多线程:std::future

    概念 我们前面介绍的std::thread 是C++11中提供异步创建多线程的工具,只能是异步运行任务,却无法获取任务执行的结果,一般都是依靠全局对象,全局对象在多线程下是及其不安全的,为此标准库提供 ...

  7. C++多线程std::async、std::future、std::packaged_task、std::promise

    std::async std::async用于创建异步任务,实际上就是创建一个线程执行相应任务,默认立即开始执行. std::async就是异步编程的高级封装,std::async的操作,其实相当于封 ...

  8. C++库std::future

    std::future 介绍 成员函数 作用 使用场景 异步任务 并发控制 结果获取 用法示例 使用std::async关联异步任务 使用std::promise与std::future配合 结果获取 ...

  9. C++11中std::future的使用

    C++11中的std::future是一个模板类.std::future提供了一种用于访问异步操作结果的机制.std::future所引用的共享状态不能与任何其它异步返回的对象共享(与std::sha ...

最新文章

  1. 漫画:生活很苦!当你扛不下去想放弃时,一定要过来看看!
  2. 10、ctemplate文档,简记(3)
  3. 学习笔记-小甲鱼Python3学习第十五讲:字符串:格式化
  4. 《算法竞赛进阶指南》打卡-基本算法-AcWing 97. 约数之和:递归、快速幂
  5. 透过三翼鸟,看品牌背后的“有效创新”
  6. MyBatis 源码分析-技术分享
  7. 【转】MFC与.NET的区别
  8. 对称式加密和非对称式加密
  9. 51nod 1428 bzoj 1651: [Usaco2006 Feb]Stall Reservations 专用牛棚
  10. Android studio 真机调试出现sdk版本不匹配问题
  11. Go语言之高级篇beego框架之模型(Models)
  12. 数据结构课设——航空航天订票系统
  13. 储油罐的变位识别与罐容表标定
  14. B树、B+树、B*树
  15. uwp之图片旋转动画实现
  16. 编译原理习题——第2章 文法和语言试卷
  17. MacOS 11 系统电子书方案----MuMu安卓模拟器
  18. MySQL 推荐书目
  19. MySQL多表联表查询
  20. 计算机连网线怎么联网,电脑直接插网线上网

热门文章

  1. 人工神经网络是什么意思,神经网络的英文是什么
  2. 黑五过后,谁会是第一个跨境电商巨头?
  3. HDU 6169 Senior PanⅡ(数论+dp)
  4. google官方mvp+dagger2架构详解
  5. PTA - 数据库合集40
  6. Handbrake编译、调试
  7. X61 U盘安装系统
  8. 航海王燃烧意志游戏分析
  9. 视频的一些相关概念(二)
  10. UG数控编程:草图之视图方向着色方式和草图的基准设置