gpt4 book ai didi

c++ - future 和 shared_future 有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 12:45:48 27 4
gpt4 key购买 nike

futureshared_future 有什么区别?
在什么情况下我们必须使用 shared_future 而不是 future

我试图找到可以对比 C++11 的这两个特性的好的文档,但我在网络上找不到答案(至少容易/可读)。

这是我目前对差异的理解

  1. future 对象对于 get() 只能查询一次。
  2. shared_future 可以查询任意次数。

用例:如果多个线程依赖于异步任务的结果,那么我们必须使用shared_future。如果 future 对象需要在同一个线程中多次查询,那么我们必须使用 shared_future 来代替。

欢迎提供更多信息、陷阱或一般指南...

最佳答案

这两种 future 类型的动机可以追溯到移动语义、只移动类型和新的 C++11 特性,即从普通函数返回只移动类型。

在 C++98/03 中,如果你想从工厂函数返回一个类型:

A
make_A()
{
A a;
// ...
return a;
}

然后 A必须是 CopyConstructible .然后,全新的 C++11,我们可以返回 A即使不是CopyConstructible , 只需 MoveConstructible .

但是如果你尝试执行 make_A 会发生什么?同时,说使用 future 。如果只能并行化 make_A 岂不是犯罪?如果 ACopyConstructible ?!您将不得不放弃一种优化而追求另一种优化!

所以 future<R>只需要R成为 MoveConstructible .但是您只能获取一次,因为您正在从存储的结果中移动。

但是为多个线程获得相同的结果也是一个真正的需求。所以shared_future<R>允许,但需要 R成为 CopyConstructible .

关于c++ - future 和 shared_future 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16005655/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com