我正在cppreference.com上阅读std :: async的描述。 第一个描述是:
模板函数async异步运行函数f (可能在单独的线程中,该线程可能是线程的一部分 池),并返回一个std :: future,最终将保留 该函数调用的结果。
。 [cppreference链接]:std::async
什么是线程池 cppreference.com 在谈论什么?
我阅读了标准草案N4713(C ++ 17),并且没有提及可能的线程池用法。 我也知道到目前为止,标准C ++中没有线程池。
答案 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
时) }),并遵循该标准。