C ++ std :: async不会产生新线程

时间:2017-02-09 05:08:07

标签: c++ multithreading asynchronous stdasync

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 threadmain thread交错,因为应该有2个不同的线程。

但事实并非如此。

输出:

async thread
async thread
async thread
async thread
...

我猜只有一个主题。有人能告诉我为什么它不会为std::async生成一个新线程吗?感谢。

1 个答案:

答案 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()完成