欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SetThreadAffinityMask中掩码的问题

程序员文章站 2022-05-18 14:48:33
...

在我们进行多线程开发的过程时,常常需要自己分配线程到不同的处理器上运算,以保证我们程序的运行效率。SetThreadAffinityMask是我们常见的选择。
1.MSDN中函数的定义

DWORD_PTR WINAPI SetThreadAffinityMask(
  _In_ HANDLE    hThread,
  _In_ DWORD_PTR dwThreadAffinityMask
);

参数hThread就是我们在使用传进去线程的句柄,dwThreadAffinityMask就是我们要传入的处理器掩码
2.掩码常见问题
0x00000001,折就是一个最常见的处理器掩码,这个就是代表使用第一个处理器,如下图所示的i5双核心四线程的处理器CPU0(逻辑上的第一个)。0x00000008就是代表在CPU3(逻辑上的第四个)上运行
SetThreadAffinityMask中掩码的问题
对于以前的电脑大多都是这样双核心四线程,我来解释下8核处理器及更多cpu核心的是如何分配到后四个处理器上的
SetThreadAffinityMask中掩码的问题
如上图所示,一个32核cpu,当我们想使用
第6个cpu运行线程时,那么掩码就是0x00000020
第7个cpu运行线程时,那么掩码就是0x00000040
第8个cpu运行线程时,那么掩码就是0x00000080
第5个和第7个cpu运行线程时,那么掩码就是0x00000050
第7个和第8个cpu运行线程时,那么掩码就是0x000000C0
第2个和第7个和第8个cpu运行线程时,那么掩码就是0x000000C2
第2个和第4个和第7个和第8个cpu运行线程时,那么掩码就是0x000000CA
以此类推

相关标签: 处理器 掩码