SethreadAffinityMask()正确用法?

Jak*_*ake 1 c++ multithreading affinity setthreadaffinitymask

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

ura*_*ray 5

那是对的.

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

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