【发布时间】:2014-06-20 17:30:38
【问题描述】:
当试图回答另一个Stackoverflow question 时,我意识到这个简单的 C++11 sn-p 正在隐式阻塞调用线程:
std::async(std::launch::async, run_async_task)
对我来说,这似乎是规范的 C++11 异步启动任务而不关心结果的方式。相反,为了实现这一点,显然必须明确地创建和分离一个线程(参见answer 提到的问题)。
所以这是我的问题:在安全/正确性方面,std::future 的析构函数是否必须阻塞?如果它只阻塞get 会不会足够,否则,如果我对返回值或异常不感兴趣,它只是触发并忘记?
【问题讨论】:
-
刚刚回复了您的评论,在这里您有一个问题,哈哈
-
@texasbruce:是的,因为它真的让我很烦。我确信这是 新的 C++11y 方法,即使我不关心结果,我也很惊讶地看到它会阻塞(仅在最后的一个注释中提到)。除非有明确的必要性,否则我认为这不是一个好的界面。
-
我相信这是对 c++14 提出的更改之一,可以按照您的预期进行。
-
@W.B.:AFAIK 的一个建议是引入
then方法,以便您可以以异步方式组合期货。我希望他们也能在那时修复这种行为。
标签: c++ multithreading c++11 asynchronous std