C++的promise和future

C++ 多线程promise 和 future std::promise/std::future​​只能传递单次结果​​,多次通信需重建对象。常规应用:​​互斥锁+条件变量​​或​​消息队列​​(平衡安全性与灵活性)。​​适用场景​​:线程间需频繁双向传递数据(如聊天程序、实时数据处理)。简单结果交换:​​Promise-Future​​(避免过度设计)。​​双队列设计​​:每个线程独享一个发送队列,共享一个接收队列。​​适用场景​​:高并发场景(如任务调度、事件驱动架构)。高性能需求:​​原子操作​​(需谨慎设计内存序)。 阅读详情
#include <iostream>
#include <thread>
#include <future>
// https://en.cppreference.com/w/cpp/thread/promise
// https://zh.cppreference.com/w/cpp/thread/promise

void add(std::promise<int> accumulate_promise, int x, int y)
{
	int sum = x + y;
	accumulate_promise.set_value(sum);  // Notify future
}


int main()
{
	std::promise<int> add_promise;
	std::future<int> add_future = add_promise.get_future();
	std::thread work_thread(add, std::move(add_promise), 100, 200);
	add_future.wait();  // wait for result
	std::cout << "result=" << add_future.get() << '\n';
	work_thread.join();  // wait for thread completion

    std::cout << "End!\n"; 
}

 

C++之future和promise future和promise的作用是在不同线程之间传递数据。使用指针也可以完成数据的传递,但是指针非常危险,因为互斥量不能阻止指针的访问;而且指针的方式传递的数据是固定的,如果更改数据类型,那么还需要更改有关的接口,比较麻烦;promise支持泛型的操作,更加方便编程处理。 假设线程1需要线程2的数据,那么组合使用方式如下: 线程1初始化一个promise对象和一个future对象,promise传递给线程2,相当于线程2对线程1的一个承诺;future相当于一个接受一个承诺,用来获取未来线程2传递的值 线 阅读详情

相关推荐

C++并发编程:future和promise的使用

C++面试题

夏天的狂风的专栏 261

C++中promise和future详解

C++中promise和future详解

weixin_45312249的博客 4811

到底是什么决定了二极管的最高工作频率?

硬件工程师,应该都用过二极管的吧,不过也许有一个误区,大多数人可能并不知道,或者说是理解有问题,下面就来细细说下。 一个问题 先提一个问题:到底是什么决定了二极管的最高工作频率? 估计有不少人会回答是二极管反向恢复时间Trr,也有人会说是二极管结电容,那到底谁是对的呢?或者说都一样,反向恢复时间由结电容决定? 到底什么决定了二极管的最高工作频率,我们暂且不论,不过需要知道的是,二极管的反向恢复时间和结电容根本就是两回事,反向恢复时间绝不能等同于结电容的充放电时间。 为什么我这么说呢?.

weixin_42005993的博客 4832

c++11 多线程之future和promise

td::future 和 std:: promise

weixin_44834554的博客 4765

Ansys Lumerical 启动时出现 Error: Could not connect to Ansys license server specified at 1055@ 的一种解决办法

考虑到 2020 版的时候是直接在全局变量里指定具体地址,但是 2024 版本是写成 1055@localhost ,并且之后在站里搜相关 Ansys 的问题都指向 1055 端口被占用,虽然问题不一样,但是本着死马当活马医,就按照。我最近在跑超透镜结构,听说2024版本现在有GPU加速可以用,就把Lumerical从2020升到2024版本,结果发现一开头的破解办法完全不一样了。一开始安装的时候以为2020没有删干净,导致2024版的安装一直锁着目标地址,解决办法参考。的办法来操作,在关闭了。

qq_51404184的博客 5753

STM32duino LSM6DSO驱动库:低功耗IMU工程化实践

惯性测量单元(IMU)是智能终端与工业设备实现运动感知的核心传感器,其性能关键在于数据精度、实时响应与系统功耗的协同优化。LSM6DSO作为集成加速度计与陀螺仪的六轴MEMS器件,依托片上有限状态机(FSM)和机器学习核心(MLC),支持自由落体检测、计步器、6D方向识别等硬件自治功能,显著降低主控CPU负载。在STM32平台下,通过深度耦合HAL/LL库、显式引脚管理、DMA加速SPI传输及EXTI中断协同,可实现亚毫秒级事件响应与微安级待机功耗。本文聚焦STM32duino生态中LSM6DSO驱动的工程

weixin_36304957的博客 551

c++基础语法之future,promise,async详细讲解-SurfaceFlinger学习必备c++知识

std::promise用来包装一个值将数据和future绑定起来,为获取线程函数中的某个值提供便利,取值是间接通过promise内部提供的future来获取的,也就是说promise的层次比future高。这个问题回答其实可以考虑一下future的获取,future都是需要几个固定的异步线程调用方式,比如async这种,但是很多时候不喜欢用这种异步方式,那么自然也就没办法获取future,所以为了future的获取更加灵活方便,就需要有这个promise对象。

learnframework的博客 1617

Pytorch实现softmax多分类

PyTorch实现softmax多分类

天涯雨的博客 1388

C++异步编程(Promise 和 Future)

与c#(async/await)类似,c++ stl也提供类似的异步编程操作,如下文摘自ChatGPT,详细介绍了此类用法。C++11 引入了 Promise 和 FutureC++17 引入了 async/await语法在 C++11 中,和提供了一种线程间通信的方式。它们常用于一个线程(生产者)产生值,另一个线程(消费者)等待该值。这种机制被称为“承诺-未来”模式。

积累点滴,保持自我 1779

第4章--CANoe library开发 - 诊断功能

因为专栏要做的是汽车ECU自动化测试程序,测试的是ECU的诊断和刷新,因此就需要利用CANoe的接口,开发一些方便使用的诊断报文收发函数。

j187067046的博客 1398

微信小程序 - 最新将页面可分享到朋友圈功能,小程序实现分享到朋友圈功能,开启分享给好友及分享朋友圈功能(微信小程序怎么分享到朋友圈?详细流程及示例代码教程)

没有设置过分享朋友圈功能的小程序,分享朋友圈按钮是灰色且无法点击。小程序 vue2 | vue3 版本语法都能使用,跟着教程复制代码运行即可。如下图所示,将页面开启分享后便可由用户转发出去。

🏆 前端领域优质创作者 2418

c++ 之future和promise

future和promise可以配合使用,主要作用是在不同线程间传递数据。举个简单例子,直接看代码: 从这个代码可以看到主线程中声明了一个p,然后通过p.get_future()将promise和future绑定。再将promise变量传到set_promise线程中,在set_promise线程中对promise赋值。然后就可以在主线程中通过future的get获取promise设置的值。 运行结果: 这里需要注意的一点是。如果set_promise线程迟迟没有对promise设置值,那主线程的futur

SWX230162的博客 2792

93.华为路由器:IPSec加密GRE通道(GRE over IPsec)

IPSec加密GRE通道 由于GRE隧道不提供安全性保障,使用ipsec加密gre隧道是现网中比较常用的VPN部署,它的加密方式分为两种: 可以使用IPsec来加密隧道进行传输,叫做IPsec over GRE; 加密数据流后从隧道传输,称为GRE over IPsec。 下面将配置一个简单的IPsec over GRE实验。 一、搭建模拟环境 首先我们先搭建环境,先根据拓扑图把基本的IP地址配好,然后分别在AR1、AR3加两条静态路由,使得两个公网互通。 [AR1]in g0/0/0 [AR

迷逝 1万+

【C++11】promise和future介绍

【C++11】promise和future介绍 C++11提供了std::promise和std::future两个模板类,通过这两个模板类可以实现异步存储值并获取值的功能。 std::promise The class template std::promise provides a facility to store a value or an exception that is later acquired asynchronously via a std::future object crea

林多 1539

⚡【C++要笑着学】(13) STL介绍:什么是STL标准模板库 | STL的版本 | 浅谈STL的缺陷

再讲解函数模板之前先对STL做一个小铺垫,本篇将对STL做一个简单的介绍。

有道无术, 术尚可求。有术无道, 止于术。 3035

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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

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

HULK一线技术杂谈 1642

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C++ 并发 future, promise和async

本文系统介绍了同步与异步编程的核心概念及C++11中的异步编程工具。同步编程按顺序执行任务并阻塞当前线程,而异步编程允许任务并发执行并通过回调、Promise等方式通知结果。文章重点讲解了C++11中的异步编程组件:std::async用于异步执行函数并返回future对象,支持不同的启动策略;std::promise/future机制则实现了线程间值或异常的传递。最后通过代码示例展示了这些工具的使用方法,并指出了promise生命周期管理的重要性。这些工具为C++开发者提供了强大的异步编程能力,能有效提升

菜一头包的博客 1025

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

CPP多线程3:async和future、promise

本文介绍了C++中异步编程的几种方式,重点比较了std::async和std::thread的差异。std::async比std::thread更灵活,可以自动选择同步或异步执行,且能方便地获取返回值。文章详细讲解了std::async的用法、参数和返回值std::future,以及如何通过std::future获取异步操作结果。对于需要使用std::thread的场景,介绍了通过std::promise传递返回值的方法。最后,还提供了std::future和std::promise常用成员函数的说明,帮助

weixin_51878399的博客 858

c++ 线程的future和promise理解

在C++中,和是与异步操作相关的两个非常重要的类,它们位于<future>头文件中。这两个类为线程间的单向通信提供了一种机制,允许一个线程向另一个线程传递数据、状态或异常,而不需要显式地使用锁(如std::mutex)或其他低级同步操作。

weixin_39291964的博客 487

c++中 promise和future CS模型实现

本文将基于promise和future实现异步的CS模型,AP autosar中SOMEIP的通信就是基于这个模型实现的。

u012213701的博客 282

C++11的future和promise及active object并发模式

《C++并发编程实战》中提到了C++11中的future,网上查找一些资料大都只说了使用,并没有详细介绍future。本文简单介绍了我对future的理解

MeRcy_PM的博客 3810

C++中的future和promise使用方法

std::promise 对象可以保存某一类型 T 的值,该值可被 future 对象读取(可能在另外一个线程中),因此 promise 也提供了一种线程同步的手段。在 promise 对象构造时可以和一个共享状态(通常是std::future)相关联,并可以在相关联的共享状态(std::future)上保存一个类型为 T 的值。异步操作不能马上就获取操作结果,只能在未来某个时候获取,但可以以同步等待的方式来获取结果,可以通过查询future的状态(future_status)来获取异步操作的结果。

HuYingJie_1995的博客 1778

C++ promise和future

通过使用 std::promise 和 std::future,就有了task的全部控制权。 std::promise 允许设置一个值,一个消息,或者一个异常。 该结果可以延迟由promise提供。 std::future 可以从promise获取值,请求性获取,值可用的话就可获取到了。 等待promise的消息通知。 等待可以使用一个相对持续时间或绝对时间点来完成=&gt;替代...

未来之歌 4383

C++并发三剑客:future、promise和async

std::future::get() 是一个阻塞调用,用于获取 std::future 对象表示的值或异常。std::future::wait() 也是一个阻塞调用,但它与 get() 的主要区别在于 wait() 不会返回任务的结果。在上面的示例中,我们创建了一个包装了任务的std::packaged_task对象,并获取了与任务关联的std::future对象。最后,我们输出结果。:这种策略意味着任务将在调用std::future::get()或std::future::wait()函数时延迟执行。

m0_50127633的博客 1224

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

女主宣言由于工作需求,笔者最近在阅读 Pulsar C++ 客户端的实现,发现该客户端虽然是基于 C++11 编写的,但却自己编写了 Future 和 Promise 类,随着阅读的深入,也体会到了在这里”重复造轮子“的原因。本文将根据lib/Future.h中的源码,讲述C++中Future和Promise的一种简单实现~PS:丰富的一线技术、多元化的表现形式,尽在“360云计算”,点...

weixin_39627697的博客 150
上一篇: Windows简单TCPIP服务
下一篇: 把不同类型的对象放入数组
双杯献酒
博客等级 码龄25年 102粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值