SetThreadAffinityMask中掩码的问题

  • Post author:
  • Post category:其他


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


1.MSDN中函数的定义

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

参数

hThread

就是我们在使用传进去线程的句柄,

dwThreadAffinityMask

就是我们要传入的处理器掩码


2.掩码常见问题


0x00000001,折就是一个最常见的处理器掩码,这个就是代表使用第一个处理器,如下图所示的i5双核心四线程的处理器CPU0(逻辑上的第一个)。0x00000008就是代表在CPU3(逻辑上的第四个)上运行

这里写图片描述

对于以前的电脑大多都是这样双核心四线程,我来解释下8核处理器及更多cpu核心的是如何分配到后四个处理器上的

这里写图片描述

如上图所示,一个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

以此类推



版权声明:本文为u013052326原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。