C ++ 11
int main(int argc, char** argv) {
std::async(std::launch::async, [](){
while(true) cout << "async thread" <<endl;
});
while(true) cout << "main thread" << endl;
return 0;
}
我预计输出应与async thread
和main thread
交错,因为应该有2个不同的线程。
但事实并非如此。
输出:
async thread
async thread
async thread
async thread
...
我猜只有一个主题。有人能告诉我为什么它不会为std::async
生成一个新线程吗?感谢。
答案 0 :(得分:5)
更改为:
auto _ = std::async(std::launch::async, [](){
while(true) cout << "async thread" <<endl;
});
文件:
如果从std :: async获取的std :: future未被移动或绑定 对于一个引用,std :: future的析构函数将阻塞 完整表达式结束,直到异步操作完成, 基本上制作以下同步代码:
std :: async(std :: launch :: async,[] {f();}); //临时的dtor等待 for f()std :: async(std :: launch :: async,[] {g();}); //没有开始 直到f()完成