首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >std::异步-std::std::std::std::deferred

std::异步-std::std::std::std::deferred
EN

Stack Overflow用户
提问于 2012-02-20 10:56:00
回答 2查看 3.1K关注 0票数 8

我理解std::async如何处理以下参数。

  • std::launch::async
  • std::launch::deferred

但是发生了什么,std::launch::async | std::launch::deferred

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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()和最后一个引用结果的未来对象的析构函数。

票数 10
EN

Stack Overflow用户

发布于 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启动新的线程。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9359981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档