C++ cppreference.com 谈论的是哪个线程池?

cyr*_*ldz 5 c++ multithreading asynchronous threadpool

我正在 cppreference.com 上阅读 std::async 的描述。第一个描述说:

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

。[cpp参考链接]:std::async

cppreference.com所说的线程池是什么?

我阅读了标准草案 N4713 (C++ 17),但没有提到可能的线程池用法。我还知道目前标准 C++ 中还没有线程池。

Pau*_*ers 4

cppreference 和 C++ 标准实际上在这一点上是不一致的。cppreference 是这么说的(强调和删除线是我的):

模板函数异步async运行该函数f可能可选地在单独的线程中运行,该线程可能是线程池的一部分)。

C++ 标准是这样说的:

如果launch::async在 中设置policy,则 [ std::async] 调用 [函数 f] ,就像在新的执行线程中一样...

这显然是两件不同的事情。

只有 Windows 的实现std::async使用线程池 AFAIK,而 gcc 和 clang 为每次调用启动一个新线程std::async(当launch::async在 中设置时policy),因此遵循标准。

更多分析在这里:https ://stackoverflow.com/a/50898570/5743288