我理解std::async
如何处理以下参数。
std::launch::async
std::launch::deferred
但是发生了什么,std::launch::async | std::launch::deferred
发布于 2012-02-20 14:01:27
std::launch::async | std::launch::deferred
的启动策略意味着实现可以选择是应用std::launch::async
策略还是std::launch::deferred
策略。这一选择可能因呼叫而异,可能不会立即作出决定。
因此,总是选择一种或另一种的实现是合法的( gcc就是这样做的,总是选择延迟),就像选择std::launch::async
直到达到某种限制,然后切换到std::launch::deferred
一样。
这也意味着实现可以将选择推迟到以后。这意味着,该实现可能等待作出决定,直到它的手被一个调用所强制,该调用与延迟和异步任务有明显的不同影响,或者直到运行的任务数量少于内部任务限制。这就是just::thread所做的。
强制决策的函数是:wait()
、get()
、wait_for()
、wait_until()
和最后一个引用结果的未来对象的析构函数。
发布于 2012-02-20 11:31:48
ISO 14882-2011年的Chaprer 30.6.8解释说,launch::async | launch::deferred
的意思是implementations should defer invocation or the selection of the policy when no more concurrency can be effectively exploited
(与没有policy
参数的async
相同)。
实际上,这意味着只要有未使用的C++核心,async
运行时就应该为每个async
启动新的线程。
https://stackoverflow.com/questions/9359981
复制相似问题