2

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

4

1 回答 1

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 等待 f() std::async(std::launch::async, []{ g(); }); // 直到 f() 完成才开始

于 2017-02-09T05:15:58.430 回答