2017-02-09 40 views
1

C++ 11C++的std ::异步不会产生一个新的线程

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?谢谢。

+3

http://en.cppreference.com/w/cpp/thread/async - 阅读注释。 – chris

回答

5

更改为这样:

auto _ = std::async(std::launch::async, [](){ 
    while(true) cout << "async thread" <<endl; 
}); 

文献:

如果从标准::异步获得的std ::未来不是从移动或结合 与参考比较,的析构函数std :: future将在完整表达式的末尾 处阻止,直到异步操作完成, 本质上使得代码如下同步:

std :: async(std :: launch :: async,[] {f(); }); //临时的dtor为f()std :: async(std :: launch :: async,[] {g();})等待 ; //不启动 直到f()完成