futurepromise的作用是在不同线程之间传递数据。使用指针也可以完成数据的传递,但是指针非常危险,因为互斥量不能阻止指针的访问;而且指针的方式传递的数据是固定的,如果更改数据类型,那么还需要更改有关的接口,比较麻烦;promise支持泛型的操作,更加方便编程处理。

假设线程1需要线程2的数据,那么组合使用方式如下:

  • 线程1初始化一个promise对象和一个future对象,promise传递给线程2,相当于线程2对线程1的一个承诺;future相当于一个接受一个承诺,用来获取未来线程2传递的值
  • 线程2获取到promise后,需要对这个promise传递有关的数据,之后线程1的future就可以获取数据了。
  • 如果线程1想要获取数据,而线程2未给出数据,则线程1阻塞,直到线程2的数据到达

一个简单的说明流程:


简单的代码示例:

#include <iostream>
#include <functional>
#include <future>
#include <thread>
#include <chrono>
#include <cstdlib>void thread_set_promise(std::promise<int>& promiseObj) {std::cout << "In a thread, making data...\n";std::this_thread::sleep_for(std::chrono::milliseconds(1000));promiseObj.set_value(35);std::cout << "Finished\n";
}int main() {std::promise<int> promiseObj;std::future<int> futureObj = promiseObj.get_future();std::thread t(&thread_set_promise, std::ref(promiseObj));std::cout << futureObj.get() << std::endl;t.join();system("pause");return 0;
}

输出结果:

C++11多线程---future和promise相关推荐

  1. C++11多线程のfuture,promise,package_task

    一.c++11中可以在调用进程中获取被调进程中的结果,具体用法如下 // threadTest.cpp: 定义控制台应用程序的入口点. // #include "stdafx.h" ...

  2. [C++] - C++11 多线程 - Future

    整理转自:https://github.com/forhappy/Cplusplus-Concurrency-In-Practice/tree/master/zh/chapter6-Future Ta ...

  3. C++11多线程---future、shared_future、atomic

    目录 一.std::future的其他成员函数 二.std::shared_future 三.原子操作std::atmic 在上篇:C++11多线程---async.future.package_ta ...

  4. C++11多线程之future和promise

    std::future和promise的作用是在不同线程之间传递数据.使用指针也可以完成数据的传递,但是指针非常危险,因为互斥量不能阻止指针的访问:而且指针的方式传递的数据是固定的,如果更改数据类型, ...

  5. C++11 并发指南一(C++11 多线程初探)

    引言 C++11 自2011年发布以来已经快两年了,之前一直没怎么关注,直到最近几个月才看了一些 C++11 的新特性,今后几篇博客我都会写一些关于 C++11 的特性,算是记录一下自己学到的东西吧, ...

  6. C++11 多线程库使用说明

    多线程基础 1.1 进程与线程 根本区别: 进程是操作系统资源分配的基本单位,线程是任务调度和执行的基本单位 开销方面: 每个进程都有自己独立的代码和数据空间,程序之间的切换开销较大. 线程可以看作是 ...

  7. C++中Future和Promise的一种简单实现

    女主宣言 由于工作需求,笔者最近在阅读 Pulsar C++ 客户端的实现,发现该客户端虽然是基于 C++11 编写的,但却自己编写了 Future 和 Promise 类,随着阅读的深入,也体会到了 ...

  8. [C++] - C++11 多线程 - Thread

    转载整理自:https://github.com/forhappy/Cplusplus-Concurrency-In-Practice/tree/master/zh/chapter3-Thread 1 ...

  9. 中的listeners_C++中Future和Promise的一种简单实现

    女主宣言 由于工作需求,笔者最近在阅读 Pulsar C++ 客户端的实现,发现该客户端虽然是基于 C++11 编写的,但却自己编写了 Future 和 Promise 类,随着阅读的深入,也体会到了 ...

最新文章

  1. MultipartFile类常用的一些方法
  2. First Scrum 冲刺
  3. 讲解sed用法入门帖子
  4. 底部居中_中文编程:安卓的底部菜单设计
  5. 为什么有些人看起来年纪轻轻,但思想深度和高度却远高于常人?
  6. 《程序员自我修养》阅读笔记-可执行文件装载与进程
  7. .NET基础示例系列之十五:操作Excel
  8. 华硕AURA无法启动问题或者AURA解压缩支持文件时出错,灾难性故障
  9. [Unity][AssetBundle]本地其他项目AB包加载AB打包文件文件路径
  10. Visual Paradigm 顾客旅程地图 (Customer Journey Map)
  11. 这次的新计算,很全能!
  12. 如何在NLP领域做成一件事by周明ACL计算语言学会候任主席(附PDF公号发“NLP做事”下载rar讲座PPT等10文件)
  13. 微信公众号自定义菜单跳转到历史消息页面
  14. chrome无痕模式可访问但正常模式访问不了
  15. 老旧小区安防难题成遗留“沉疴” 如何破解?
  16. 新的一天,加油努力!
  17. 中芯国际透露:14nm或不能为某客户代工
  18. NetApp运维使用手册
  19. 完整过程解决 ERROR 1045 (28000): Access denied for user 'mysql'@'localhost' (using password: NO)
  20. 8个有用的 CSS 技巧:视差图像,sticky footer 等等

热门文章

  1. 安卓马赛克view_Android马赛克效果MosaicView
  2. AcWing1073.树的中心(树形DP)题解
  3. 利用 VScode 对比两个文件差异
  4. Python之倒序访问list
  5. ##CSP 201512-3 画图(C语言)
  6. 《深度学习笔记》——初识PyTorch的学习笔记
  7. 【已解决】ModuleNotFoundError: No module named ‘web’的解决办法:
  8. Eclipse中Java编程时快速生成set和get方法
  9. 目标检测之SSD数据处理、训练与预测流程记录
  10. 运算符重载——关系运算符重载