【发布时间】:2012-04-01 18:28:31
【问题描述】:
我对 std::async 函数与从异步返回的 std::launch::async 策略和 std::future 对象的行为有一些疑问。
在下面的代码中,主线程在async调用创建的线程上等待foo()完成。
#include <thread>
#include <future>
#include <iostream>
void foo()
{
std::cout << "foo:begin" << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(10));
std::cout << "foo:done" << std::endl;
}
int main()
{
std::cout << "main:begin" << std::endl;
{
auto f = std::async(std::launch::async, foo);
// dtor f::~f blocks until completion of foo()... why??
}
std::this_thread::sleep_for(std::chrono::seconds(2));
std::cout << "main:done" << std::endl;
}
我知道http://www.stdthread.co.uk/doc/headers/future/async.html 说
与 返回的 std::future 的异步状态应阻塞,直到 未来已准备就绪。
我的问题是:
- 第一季度。这种行为是否符合当前的 C++ 标准?
- 第二季度。如果 Q1 的回答是肯定的,哪些陈述是这样说的?
【问题讨论】:
-
该标准的惊人之处在于,一个脚注通常会完全改变一章......
标签: c++ multithreading c++11