C++ std::async是否以std::launch::async启动,在函数退出时,每个作用域和块的跨度不超过一个线程?

C++ std::async是否以std::launch::async启动,在函数退出时,每个作用域和块的跨度不超过一个线程?,c++,multithreading,c++11,asynchronous,C++,Multithreading,C++11,Asynchronous,阅读关于: 给人的印象是,如果调用fun,它将一直阻塞,直到执行g()。请告诉我我错了,std::async logic背后有一些合理的任务池?不,你是对的。使用std::launch::async策略从std::async返回的期货将在销毁时阻止。请参阅以了解更多详细信息。然而,这并不妨碍并行启动多个项目-您只需将未来保留在某个位置(通常您希望这样做,以便稍后检索结果)。不,你说得对。使用std::launch::async策略从std::async返回的期货将在销毁时阻止。请参阅以了解更多详

阅读关于:


给人的印象是,如果调用fun,它将一直阻塞,直到执行g()。请告诉我我错了,std::async logic背后有一些合理的任务池?

不,你是对的。使用
std::launch::async
策略从
std::async
返回的期货将在销毁时阻止。请参阅以了解更多详细信息。然而,这并不妨碍并行启动多个项目-您只需将未来保留在某个位置(通常您希望这样做,以便稍后检索结果)。不,你说得对。使用
std::launch::async
策略从
std::async
返回的期货将在销毁时阻止。请参阅以了解更多详细信息。然而,这并不妨碍并行启动多个项目-您只需将未来保留在某个位置(通常您希望这样做,以便稍后检索结果)。这是
void fun() {
    std::async(std::launch::async, []{ f(); }); // temporary's dtor waits for f()
    std::async(std::launch::async, []{ g(); }); // does not start until f() completes
}