SetThreadAffinityMask中掩码的问题

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

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

参数hThread就是我们在使用传进去线程的句柄,dwThreadAffinityMask就是我们要传入的处理器掩码
2.掩码常见问题
0x00000001,折就是一个最常见的处理器掩码,这个就是代表使用第一个处理器,如下图所示的i5双核心四线程的处理器CPU0(逻辑上的第一个)。0x00000008就是代表在CPU3(逻辑上的第四个)上运行
SetThreadAffinityMask中掩码的问题_第1张图片
对于以前的电脑大多都是这样双核心四线程,我来解释下8核处理器及更多cpu核心的是如何分配到后四个处理器上的
SetThreadAffinityMask中掩码的问题_第2张图片
如上图所示,一个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
以此类推

你可能感兴趣的:(c++,处理器,掩码)