首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SetThreadAffinityMask()动态选择要在哪些线程上运行

使用SetThreadAffinityMask()动态选择要在哪些线程上运行
EN

Stack Overflow用户
提问于 2013-07-26 13:27:48
回答 1查看 770关注 0票数 0

我正在编写一个基准程序,我想要的是在不同的核心上运行一个线程,一个接一个。例如,它只在核心0上运行,然后在核心0,1,2,3,然后在0,1,2,3,4,5,6,7上运行(如果机器有8个核心)。我对需要传递给SetThreadAffinityMask()的第二个参数感到困惑。

我可以传递一个十进制数,也可以传递一个十六进制。在巫术中,我可以通过:

代码语言:javascript
复制
0x0001 for core 0,
0x0003 for cores 0,1,
0x000F for cores 0,1,2,3

但我很难想出如何动态地创造这些价值观。本质上,对于任意数量的核,我需要能够得到十六进制值来将所有核的亲和力设置到这个数目。任何从哪里开始的帮助都会很好。

EN

回答 1

Stack Overflow用户

发布于 2013-07-26 13:33:16

位值为1 << core_number。所以如果你有这样的东西

代码语言:javascript
复制
vector<int> cpus_to_use = { 1, 3, 9, 11 }; 

然后,您可以通过以下方式制作亲和力掩码:

代码语言:javascript
复制
int mask = 0;
for( i : cpus_to_use) 
    mask |= 1 << i; 

如果您只想设置所有位,那么(1 << num_cores) - 1将给您设置num_cores位。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17882591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档