【问题标题】:In c++11 how to use std::async with std::launch::any在 c++11 中,如何将 std::async 与 std::launch::any 一起使用
【发布时间】:2013-11-05 08:11:03
【问题描述】:

从网站 cppreference.com ,我了解到: “如果在策略中同时设置了 std::launch::async 和 std::launch::deferred 标志,则执行异步执行还是延迟评估取决于实现。”

如何理解“执行是异步执行还是延迟执行”。如果我为它们都设置了标志,那么,这是在新线程中执行还是在本地线程中延迟执行?

【问题讨论】:

    标签: c++ multithreading c++11 asynchronous


    【解决方案1】:

    如何理解'实现是否执行异步 执行或惰性求值”。

    嗯,就像它所说的那样。当两个标志都设置时,实现自行决定是在新的/不同的线程中开始计算(对应于std::launch::async)还是使用惰性求值(对应于std::launch::deferred)。后者意味着在您使用std::future::getstd::future::wait 和朋友查询返回的未来之前,它不会运行任何计算,这将导致计算在“本地”线程中执行。

    如果我为他们两个都设置了标志,那么,这是否会在新的 在本地线程中执行线程还是延迟执行?

    如上所述,在这种情况下,由实现决定做什么,每次调用 std::async(std::launch::async | std::launch::deferred, ...) 时都会有所不同。

    【讨论】:

    • 典型实现会做什么以及为什么?
    • @usr 不知道,可能检查当前正在运行(或正在做重要工作)的线程是否已经多于实际内核或类似的东西。
    【解决方案2】:

    如果您同时使用std::launch::asyncstd::launch::deferred,您就是在告诉实现您不在乎它使用哪一个。如果你在乎,不要说你不在乎。选择你想要的。

    【讨论】:

      猜你喜欢
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-21
      • 2017-06-19
      • 2012-07-13
      • 2012-11-15
      • 1970-01-01
      相关资源
      最近更新 更多