繁体   English   中英

在同一个线程中的同一个实例上多次调用shared_future :: get()是否合法?

[英]Is it legal to call shared_future::get() multiple times on the same instance in the same thread?

我既不能直接确认也不能驳斥此事。 所有答案似乎都解决了“从多个线程访问”的问题,而不是重复访问本身。

标准是否定义了std::shared_future的行为? 那么boost::shared_future呢?

std::shared_future<T>::valid每个cppreference

与std :: future不同,调用get()时,std :: shared_future的共享状态不会失效。

这是有道理的。 如果不是这种情况那么你就不能让多个线程能够调用get 我们可以通过查看标准来进一步提高这一点。 [futures.unique.future] / 15 ,他们明确规定get只使用一次

释放任何共享状态([futures.state])。

虽然在[futures.shared.future] / 18中它没有说明这样的事情,所以在调用get之后状态仍然有效。


boost::shared_future具有相同的行为。 参考 get没有文字说明它无效通话中的共享状态来get ,所以你可以把它多次。

AFAIK这是合法的。 std::shared_future<T>::get()

如果在调用此函数之前valid()false ,则行为未定义。

转到std::shared_future<T>::valid() 它说

检查未来是否涉及共享状态。

...

std::future不同, 调用get()std::shared_future的共享状态不会失效

这将使来自同一线程和同一实例的多个get()调用有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM