gpt4 book ai didi

c++ - 当未存储返回值时,std::async 不会生成新线程

转载 作者:太空宇宙 更新时间:2023-11-04 13:40:41 27 4
gpt4 key购买 nike

假设我有 lamba foo,它只做一些事情,不需要返回任何东西。当我这样做时:

std::future<T> handle = std::async(std::launch::async, foo, arg1, arg2);

一切运行良好,lamba 将在一个新线程中生成。但是,当我不存储 std::async 返回的 std::future 时,foo 将在主线程中运行并阻止它。

std::async(std::launch::async, foo, arg1, arg2);

我在这里错过了什么?

最佳答案

来自 just::thread documentation :

If policy is std::launch::async then runs INVOKE(fff,xyz...) on its own thread. The returned std::future will become ready when this thread is complete, and will hold either the return value or exception thrown by the function invocation. The destructor of the last future object associated with the asynchronous state of the returned std::future shall block until the future is ready.

std::async(std::launch::async, foo, arg1, arg2);

返回的 future 没有分配到任何地方,它的析构函数阻塞直到 foo 完成。

关于c++ - 当未存储返回值时,std::async 不会生成新线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27712489/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com