SetThreadAffinityMask中掩码的问题

在我们进行多线程开发的过程时,常常需要自己分配线程到不同的处理器上运算,以保证我们程序的运行效率。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
以此类推

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值