Windows在默认线程池中设置最大线程数

时间:2020-08-07 18:29:34

标签: c multithreading winapi

从Windows Vista开始,每个应用程序都会自动获得一个thread pool(“默认线程池”)。

我的问题是:是否可以为此默认线程池配置最小和最大线程数?

SetThreadpoolThreadMaximum似乎仅适用于非默认线程池(使用CreateThreadpool创建的池):

SetThreadpoolThreadMaximum(NULL, 4);-抛出0xC000000D: An invalid parameter was passed to a service or function

1 个答案:

答案 0 :(得分:1)

根据Microsoft的Joe Duffy的说法,这是不可能的。

以下是他的书Concurrent Programming on Windows,第7章的引用。线程池,第345页:

请注意,无法更改默认线程池的 最小和最大数量;相反,您必须指定一个指向 自定义TP_POOL对象。在Vista之前,您可以更改 进程范围内的默认池的最大值(我们将在后面看到)。原因是 功能被删除是因为它取决于种族:最后一个 调用API的组件将获胜。这可能导致之间的冲突 同一过程中彼此不知道但需要的组件 不同的最大值或最小值。

增加作者所指的池大小的“老方法”是在QueueUserWorkItem中使用的宏WT_SET_MAX_THREADPOOL_THREADS。在新的池体系结构中,似乎忽略了该设置。

因此默认池的最小值固定为0,最大值为500。

相关问题