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
.