- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
future
和 shared_future
有什么区别?
在什么情况下我们必须使用 shared_future
而不是 future
?
我试图找到可以对比 C++11 的这两个特性的好的文档,但我在网络上找不到答案(至少容易/可读)。
这是我目前对差异的理解
future
对象对于 get()
只能查询一次。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
岂不是犯罪?如果 A
是 CopyConstructible
?!您将不得不放弃一种优化而追求另一种优化!
所以 future<R>
只需要R
成为 MoveConstructible
.但是您只能获取一次,因为您正在从存储的结果中移动。
但是为多个线程获得相同的结果也是一个真正的需求。所以shared_future<R>
允许,但需要 R
成为 CopyConstructible
.
关于c++ - future 和 shared_future 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16005655/
我正在尝试为 Raspberry Pi 交叉编译一个大型项目。我正在使用由 crosstool-ng 构建的工具链,gcc 版本 4.7.3。当看到 std::shared_future 时,编译会停
Passing std::shared_future by value是合法的,因为 std::shared_future 是可复制的。 #include #include #include i
我找不到关于此事的直接确认或反驳。所有答案似乎都解决了“从多线程访问”方面的问题,而不是重复访问本身。 标准是否定义了 std::shared_future 的行为? boost::shared_fu
future 和 shared_future 有什么区别? 在什么情况下我们必须使用 shared_future 而不是 future? 我试图找到可以对比 C++11 的这两个特性的好的文档,但我在
一般问题: 是 std::shared_future::operator= atomic 吗? 例如 struct object { object() { sf = std::
我有一个 DAG 任务,我正在尝试使用 boost::shared_future 框架执行这些任务。 举个具体的例子,考虑图中的data flow graph。 下面是对此进行编码的尝试: #incl
Josuttis 指出 [“标准库”,第 2 版,第 1003 页]: Futures allow you to block until data by another thread is provi
我有一个线程从容器中获取每个元素并向数据库发送上传请求。上传是同步完成的。 容器中的元素是金融合约,它们可能有也可能没有与之关联的数据结构调用 ticktable。 现在,对于那些有 ticktabl
我对 Effective Modern C++ 的第 270 页有疑问,作者是 Scott Meyers。 第 5/6 行,他写道:“唯一的微妙之处在于每个 react 线程都需要引用共享状态的 st
我了解什么是 std::future 但我不了解何时以及如何使用 std::shared_future 和 std::promise,而且我在网上找不到很好的解释。 我会很感激一些帮助我解决这个问题。
C++标准库中的各种类都有成员交换函数,包括一些多态类,如std::basic_ios。 .模板类std::shared_future显然是一个值类型并且 std::future是一个只能移动的值类型
我尝试使用 boost thread futures .所以如图here我们可以得到 shared future来自 packaged task . 所以我在 linux 上尝试这样的功能: temp
我是一名优秀的程序员,十分优秀!