我在物理和虚拟机上测试了一段C代码,需要在执行C程序时限制使用的CPU数量。有没有办法做到这一点?
虽然不是跨平台的,但在Windows中,您可以使用SetProcessAffinityMask
函数:
SetProcessAffinityMask(GetCurrentProcess(), 0x1); //Only CPU #1
对于Linux,有一个名为sched_setaffinity
的函数。例如,如果您希望它仅在CPU 1和3上运行:
cpu_set_t set;
CPU_ZERO(&set);
CPU_SET(1, &set);
CPU_SET(3, &set);
sched_setaffinity(pid, CPU_SETSIZE, &set);
注意: sched_setaffinity
和 sched_getaffinity
是专属于Linux的(在其他POSIX系统上不存在)。
在BSD上有类似语义的cpuset_setaffinity
。我预计Solaris也有类似的功能。