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

时间:2019-04-26 18:16:19

标签: c++ multithreading asynchronous threadpool

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

  

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

。 [cppreference链接]:std::async

什么是线程池 cppreference.com 在谈论什么?

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

2 个答案:

答案 0 :(得分:3)

完全是假设的。 cppreference试图告诉您标准允许在线程池中执行任务(与启动新线程来执行任务相反)。尽管标准可能未明确允许它,但也没有任何东西可以禁止它。

我不知道会为std::async使用线程池的任何实现。

答案 1 :(得分:2)

实际上,

cppreference和C ++标准是矛盾的。 cppreference这样说(我的重点和删除线):

  

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

C++ standard这样说:

  

如果在{{1}中设置了launch::async,则[policy]调用[函数f] 就像在新的执行线程中一样 ... < / p>

这显然是两件事。

只有Windows的std::async实现使用线程池AFAIK,而gcc和clang每次std::async的调用都会启动一个新线程(当{{1}中设置了std::async时) }),并遵循该标准。

更多分析请点击:https://stackoverflow.com/a/50898570/5743288