首页 > 其他分享 >std::future 如何保存多个对象进行同步等待

std::future 如何保存多个对象进行同步等待

时间:2023-06-27 09:45:59浏览次数:35  
标签:std 异步 同步 get future1 future shared

std::future 是一个 C++11 引入的标准库类,可用于异步获取计算结果。通常情况下,std::future 可以通过 get() 函数来等待异步操作完成,并获取其结果。 如果需要等待多个异步操作完成并获取它们各自的结果,可以使用 std::future 的姊妹类 std::shared_future 来实现。 std::shared_future 与 std::future 类似,不同之处在于它可以被多个线程同时访问和等待。因此,可以将多个 std::shared_future 对象保存到一个容器中,然后使用 std::shared_future 的成员函数 wait() 或 get() 等待这些异步操作完成,并获取它们的结果。 例如,假设有两个异步任务 task1 和 task2,它们分别返回类型为 T1 和 T2 的结果。可以使用以下代码来创建 std::shared_future 并保存到一个 vector 容器中:

 

查看代码

std::promise<T1> promise1;
std::future<T1> future1 = promise1.get_future();
std::shared_future<T1> shared_future1 = future1.share();

std::promise<T2> promise2;
std::future<T2> future2 = promise2.get_future();
std::shared_future<T2> shared_future2 = future2.share();

std::vectorstd::shared_future<void> futures;
futures.push_back(shared_future1);
futures.push_back(shared_future2);

接下来,可以使用 std::shared_future 的成员函数 wait() 或 get() 等待这些异步操作完成,并获取它们的结果。例如:

for (const auto& f : futures) {
  f.wait();
}

T1 result1 = future1.get();
T2 result2 = future2.get();

在上面的代码中,wait() 函数等待所有异步操作完成,而 get() 函数分别获取每个异步任务的结果。

标签:std,异步,同步,get,future1,future,shared
From: https://www.cnblogs.com/c9080/p/17507809.html

相关文章

  • C++面试八股文:std::deque用过吗?
    某日二师兄参加XXX科技公司的C++工程师开发岗位第26面:面试官:deque用过吗?二师兄:说实话,很少用,基本没用过。面试官:为什么?二师兄:因为使用它的场景很少,大部分需要性能、且需要自动扩容的时候使用vector,需要随机插入和删除的时候可以使用list。面试官:那你知道STL中的stack是如何实......
  • mycat 双主双从同步复制
              ......
  • c++ std::execution::par,std::execution::par_unseq
    #include<algorithm>#include<chrono>#include<cstdint>#include<execution>#include<iostream>#include<random>#include<vector>std::random_devicerd;std::mt19937_64mt{rd()};template<typenameT>......
  • 一个同步机无传感滑膜观测器模型加代码,该模型基于28035芯片,采用了典型的smo+pll方案
    一个同步机无传感滑膜观测器模型加代码,该模型基于28035芯片,采用了典型的smo+pll方案。这段代码是实际应用代码,而不是一般的玩票代码,因此具有较高的可比性(不同于ti例程)。需要注意的是,少数文件中的中文注释可能存在乱码问题。至于m文件,它并没有太多用处,直接运行simulink模型即可。知......
  • 采用永磁同步模型的电流预测控制和滑模控制来提高系统的鲁棒性和稳态特性。滑模控制器
    采用永磁同步模型的电流预测控制和滑模控制来提高系统的鲁棒性和稳态特性。滑模控制器结合了新型趋近律和扰动观测器,以实现更好的控制效果。电流环使用了预测控制双矢量改进算法,以提高控制精度和响应速度。涉及的知识点和领域范围:原创文章,转载请说明出处,资料来源:http://imgcs.cn/......
  • 解决redis从服务器未配置主服务器密码导致数据未同步&磁盘饱满问题
    问题前置场景本人前几天买了一台2核4G+40G磁盘空间的云服务器用来学习使用,在服务器上安装了docker。为了学习redis主从架构,使用docker-compose部署了一主二从三台redis服务,部署完成之后测试发现从服务器并没有同步主服务器的数据,查看配置文件没有看出来什么问题,进入三台redis服务......
  • Windows/Linux上如何配置NTP时间同步
    前几天装了几台VirtualBox虚机(CentOS),结果发现GuestAdditionalTool不定期出现无法从宿主机(Windows)同步时间的问题,折腾了好久,感觉是GuestAdditionalTool的bug,索性直接用NTP来同步虚机和宿主机的时间。Windows启动NTP服务:点击“运行”按钮,在运行窗口中执行services.msc命令......
  • Linux多线程08-线程同步
    一个多线程售票示例://三个窗口,共100张票#include<stdio.h>#include<pthread.h>#include<unistd.h>inttickets=100;//所有线程都共享这100张票void*sellticket(void*arg){//卖票while(tickets>0){usleep(6000);//间隔6000微秒p......
  • 服务器与本地资源同步,在ubuntu自建git库,使用nginx远程http访问
    xshell在linux与windows之间传文件虽然方便,但使用git才能真正实现资源同步。为实现服务器与本地资源同步,在ubuntu服务器端自建git库。使用 git-http-backend 搭建git服务的原理都是类似的,主要是利用web服务器(apache/nginx)进行用户认证,并将用户信息传递给CGI程序 ......
  • C++面试八股文:std::array如何实现编译器排序?
    某日二师兄参加XXX科技公司的C++工程师开发岗位第25面:面试官:array熟悉吗?二师兄:你说的是原生数组还是std::array?面试官:你觉得两者有什么区别?二师兄:区别不是很大,原生数组(非动态数组)和std::array都在栈上开辟空间,初始化的时候需要提供数组长度,且长度不可改变。有一点区别的是,st......