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



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生成一个新线程吗?谢谢。

改为:

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

公文:

如果从 std::async 获得的 std::future 未从 std::async 移出或绑定 对于引用,std::future 的析构函数将在 完整表达式的结束,直到异步操作完成, 本质上是使代码同步如下:

std::async

(std::launch::async, []{ f((; }(;//temporary's dtor waits for f(( std::async(std::launch::async, []{ g((; }(;不启动 直到 f(( 完成

相关内容

  • 没有找到相关文章

最新更新