首页 > 解决方案 > 如何手动创建将在析构函数中阻塞的未来

问题描述

我已阅读http://scottmeyers.blogspot.com/2013/03/stdfutures-from-stdasync-arent-special.html但它没有显示如何实现相同行为的示例 - 即future 将阻塞在析构函数中,与从 async 返回的析构函数相同,但不使用任何 async。

你能举一个这样的例子吗?谢谢!

标签: c++future

解决方案


如果您关注该文章下方的评论线程,您会发现其他专家不同意:

  • future不是 from 的 s应该async在析构函数中阻塞。

  • 用 Scott Meyers 解释的标准,它应该是这样的。

马蒂尼奥费尔南德斯:

我不明白为什么这是所有期货的要求:您引用的这个特定要求来自 上的要求std::async,而不是 上的要求std::future对析构函数的唯一要求std::future是它“释放共享状态”。碰巧来自的共享状态std::async添加了您引用的要求,但标准库中没有其他共享状态有这样的要求。

草本萨特:

tl;dr:Martinjo 已经正确回答了这个问题——文章不正确,阻塞仅适用于从std::asyncwith launch policy返回的期货launch::async

Scott 说:在 30.6.8/5 中,我们看到 [...] 这是对任何未来对象的要求,而不仅仅是从std::async调用返回的对象。

这不遵循。30.6.8 是std::async. 那里所说的任何内容都是特定于std::async.

但正如 Martinho 已经正确说过的那样,这个例外仅在第 30.6.8 节“函数模板异步”中,一般不适用于期货。

结论:我认为您无法找到您正在寻找的示例。


推荐阅读