CPU亲和力

是否有一个progamatic方法来设置Linux操作系统的c / c + +中的进程的CPU亲和力

你需要使用sched_setaffinity(2) ( 手册页 )

例如,仅在CPU 0和2上运行:

 #include <sched.h> cpu_set_t mask; CPU_ZERO(&mask); CPU_SET(0, &mask); CPU_SET(2, &mask); result = sched_setaffinity(0, sizeof(mask), &mask); 

(第一个参数为0表示当前进程,如果是其他进程需要控制,则提供PID)。

在进程级别使用sched_setaffinity,对于单个线程使用pthread_attr_setaffinity_np 。

简而言之

 unsigned long mask = 7; /* processors 0, 1, and 2 */ unsigned int len = sizeof(mask); if (sched_setaffinity(0, len, &mask) < 0) { perror("sched_setaffinity"); } 

查看CPU亲和力了解更多详情

我已经做了很多努力来实现发生了什么,所以我添加了这个答案,帮助像我这样的人(我在Linux mint中使用gcc编译器)

 #include <sched.h> cpu_set_t mask; inline void assignToThisCore(int core_id) { CPU_ZERO(&mask); CPU_SET(core_id, &mask); sched_setaffinity(0, sizeof(mask), &mask); } int main(){ //cal this: assignToThisCore(2);//assign to core 0,1,2,... return 0; } 

但是,不要忘记将这个选项添加到编译器命令中-D _GNU_SOURCE由于操作系统可能会将进程分配给特定内核,因此可以将GRUB_CMDLINE_LINUX_DEFAULT="quiet splash isolcpus=2,3"到位于/etc/default并在终端运行sudo update-grub来保留你想要的内核