Aje*_*nga 31 c++ multithreading mutex c++11
future和之间有什么区别shared_future?
在什么情况下我们必须使用shared_future而不是future?
我试图找到与C++ 11的这两个功能形成鲜明对比的好文档,而我在网上找不到答案(至少容易/可读).
这是我目前对差异的理解
future对象只能被查询一次get().shared_future 可以被查询任何次数.用例:如果多个线程依赖于异步任务的结果,那么我们必须使用shared_future.如果需要在同一个线程中多次查询将来的对象,那么我们必须shared_future改为使用.
欢迎提供更多信息,陷阱或一般指导方针......
How*_*ant 36
这两种未来类型的动机可以追溯到移动语义,仅移动类型和新的C++ 11特性,以从普通函数返回仅移动类型.
在C++ 98/03中,如果要从工厂函数返回类型:
A
make_A()
{
A a;
// ...
return a;
}
Run Code Online (Sandbox Code Playgroud)
然后A必须是CopyConstructible.那么,在C++ 11中全新的,A即使不是CopyConstructible,我们也可以返回,它只需要MoveConstructible.
但是如果你尝试同时执行会发生什么make_A,比如使用期货.那岂不是如果你只能并行的罪行make_A,如果A是CopyConstructible?!你不得不在追逐另一个时放弃一个优化!
所以,future<R>只需要R要MoveConstructible.但是你只能得到一次,因为你正在从存储的结果中移动.
但是,为多个线程获得相同的结果也是一个真正的需求.所以shared_future<R>允许,但需要R是CopyConstructible.
| 归档时间: |
|
| 查看次数: |
4031 次 |
| 最近记录: |