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

Adversarial Texture for Fooling Person Detectors in the Physical World

本文提出了对抗纹理的想法(AdvTexture),与基本补丁攻击不同对抗纹理可以生成任意大小,可以覆盖任意大小的不了,并且纹理的任何局部都有对抗性的效果。当衣服被对抗纹理覆盖是,摄像头捕捉到的每一个局部区域都可以攻击探测器,这成功解决了片段缺失的问题。提出了一种两阶段生成方法:基于环形收割的可扩展生成攻击(TC-EGA)来制作广告纹理。第一阶段,训练一个全卷积网络FCN作为生成器,通过采样随机潜变量作为输入来产生纹理(不同于GAN中传统的生成器架构,每一层都使用卷积运算)......

weixin_49171105的博客 1067

c++11 多线程之future和promise

td::future 和 std:: promise

weixin_44834554的博客 4765

MACS2软件进行Peak calling

MACS2可以检出ChIP-Seq,ATAC-seq 以及 MeRIP-seq (RNA甲基化测序) 等富集的序列。peaks calling 有不同的方法,MACS2是最常用的call peaks工具。 MACS全称Model-based Analysis of ChIP-Seq,最初的设计是用来鉴定转录因子的结合位点,但是它也可以用于其他类型的富集方式测序。usage: macs2 [-h] [--version] {callpeak,bdgpeakcall,bdgbroadca

qq_27390023的博客 3789

[官方培训]19-物理模拟 Epic 肖月 笔记

物理引擎全局解算精度的设置,帧率越高,子步越多得到的模拟结果就越精确。引擎默认情况下是以变化的帧率运行的,但是对于Chaos物理引擎来说。一般子步越小,帧率越固定,效果就会更好更稳定一些。图示的分步选项就是依据下方的最长子步时长和最大步数对动态变化的帧率,进一步的做拆分来保证物理效果。对于影视项目建议都开启分步选项。红色框内有三个迭代次数的设置,这是Chaos基于位置的约束求解算法专用的一个设置,可以简单理解为迭代次数越高,当前帧一个子步内得到的结果就越精确。

Tcohneyn的博客 1545

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

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

learnframework的博客 1617

LLM - windows下的Dify离线部署:从镜像打包到无网环境部署(亲测,包含插件部署)

LLM - windows下的Dify离线部署:从镜像打包到无网环境部署(亲测,包含插件部署)

ocean00008899的博客 1287

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

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

积累点滴,保持自我 1779

React 源码解析 | Reconcile协调过程

上篇讲了React的工作流程,这篇详细的讲一下render过程中的beginWork函数,也就是深度优先创建Fiber树中"递"的过程。beginWork函数传入当前已经创建好的Fiber节点,返回创建/复用的第一个子FIber节点,也就是wip.child在renderRoot中,在开始创建整棵FIber树之前,会先调用prepareRefreshStack创建/复用一个新的HostRootFiber。

weixin_40710412的博客 1220

LangChain4j + Milvus 从0-1实现会话管理与RAG检索的AIChat超详细教程

本教程将介绍如何使用LangChain4j和Milvus向量数据库构建一个具备流式输出、会话管理、会话隔离和基于文档RAG检索能力的AI机器人。我们将使用阿里百炼模型作为LLM后端,并通过Docker部署Milvus向量数据库。创建Assistant接口,定义聊天服务:LangChain4j 中文文档 | LangChain4j 中文文档wiringMode :这个属性一般两种,一种是自动装配,我们这里选择手动配置。

2301_80014343的博客 1435

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

从入门到精通:用友BIP旗舰版全模块实施与运维实战指南

本文详细介绍了用友BIP旗舰版的全模块实施与运维实战指南,涵盖财务云、供应链云、生产制造等核心模块的配置与优化技巧。通过渐进式学习法和实战案例,帮助用户从入门到精通,提升系统实施效率和运维能力,特别适合企业IT人员和实施顾问参考。

weixin_29207533的博客 899

【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

2、稳定性问题全景图——死机、重启、ANR、Crash、黑屏五大类

当 Crash 发生在 system_server、surfaceflinger、mediaserver 等关键系统进程中时,其后果等同于系统级故障,可能触发 Zygote 重启甚至 kernel panic。这类问题在稳定性治理中的优先级应等同于 P0。

woailuojp的博客 49

假人有限元模型

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

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

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

HULK一线技术杂谈 1642

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C++ 并发 future, promise和async

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

菜一头包的博客 1025

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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、付费专栏及课程。

余额充值