【问题标题】:Thread pool for std::asyncstd::async 的线程池
【发布时间】:2021-11-24 04:21:30
【问题描述】:

std::async 的文档中提到(强调我的):

函数模板 async 异步运行函数 f(可能在单独的线程中可能是线程池的一部分)并返回一个 std::future 最终将保存该结果函数调用。

是否可以为调用async 指定一个线程池?如果没有,我可以以某种方式检查是否使用了线程池?

【问题讨论】:

  • 不,很遗憾这是不可能的。
  • 可能有提供此信息的实现细节。例如,在 MSVC 上,std::async 始终是异步的,除非指定了 std::launch::deferred,并且当它是异步时,它始终在线程池中。

标签: c++ multithreading stdthread


【解决方案1】:

标准 std::async 缺乏这种级别的控制,尽管实施可能会提供诸如非标准保证/扩展等。

这种控制水平的缺失是公认的——有https://wg21.link/p0443 提议来解决这个问题。

目前最好的选择可能是使用std::threadstd::packaged_task 拥有线程池。

【讨论】:

    猜你喜欢
    • 2013-03-17
    • 2017-04-09
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多