c++ - SethreadAffinityMask() 正确用法?

标签 c++ multithreading affinity setthreadaffinitymask

我有 1500 个线程..我希望它们在 12 个处理器上运行... 为此,我打电话 SetThreadAffinityMask(GetCurrentThread(),1<<(threadnum%numprocessors)) ;其中 numprocessors=12。 面膜的使用方法正确吗? 它需要可扩展,也就是说,如果我希望它只在 11 个处理器上运行,那么 SetThreadAffinityMask(GetCurrentThread(),1<<(threadnum%numprocessors));其中 numprocessors=11。

最佳答案

没错。

但是出于性能和效率的原因,我建议您以某种方式更改线程模型,使线程数等于 CPU 执行核心的数量,然后这些线程将处理您的 1500 个任务/工作项,这些任务/工作项由您的“任务管理器”。

如果你不想创建自己的“任务管理器”,你可以使用windows ThreadPool API ,您将任务分配给由 O/S 管理的“线程池”

关于c++ - SethreadAffinityMask() 正确用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5468270/

相关文章:

c++ - 是否可以在现代 C++ 中使用 fork?

multithreading - 加入线程时出现 Perl 段错误

linux - taskset 和 sched_setaffinity 之间的交互

c++ - clflush 在 i7 中没有给出 const 数据类型的正确答案

c++ - P/Invoke,麻烦查找/声明函数入口点

C#线程池限制线程

multicore - 是否可以防止 child 继承 parent 的 CPU/核心亲缘关系?

c++ - 当我单击窗口时 OpenGL 崩溃并且我的动画没有按预期工作

c++ - 构建依赖于非 const-correct 库的 const-correct (C++) 库

windows - 为什么将多线程应用程序限制在一个核心使其运行得更快?