std::future 如何保存多个对象进行同步等待
  zm9HiVEgZG2e 2023年11月02日 49 0
C++

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() 函数分别获取每个异步任务的结果。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  8Tw5Riv1mGFK   20天前   31   0   0 C++
  BYaHC1OPAeY4   13天前   33   0   0 C++
  yZdUbUDB8h5t   16天前   22   0   0 C++
  oXKBKZoQY2lx   4天前   18   0   0 C++
zm9HiVEgZG2e