📅  最后修改于: 2023-12-03 15:19:59.555000             🧑  作者: Mango
sched_setaffinity
是Linux操作系统中的一个系统调用,它可以用来将线程或进程绑定到特定的CPU上。这个系统调用可以让开发人员更好的控制程序运行时所使用的CPU资源,从而提高程序的性能。
int sched_setaffinity(pid_t pid, size_t cpusetsize, const cpu_set_t *mask);
pid
:要设置CPU亲和性的线程或进程的ID。cpusetsize
:mask
参数指向的位掩码的大小,以字节为单位。mask
:指向包含要设置的CPU亲和性的位掩码的指针。函数成功执行则返回0,否则返回-1并设置errno变量。
#include <sched.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
cpu_set_t mask;
CPU_ZERO(&mask);
CPU_SET(0, &mask); // 将第0个CPU添加到掩码中
if (sched_setaffinity(0, sizeof(mask), &mask) == -1) {
perror("sched_setaffinity failed");
return -1;
}
printf("CPU affinity set to CPU 0\n");
return 0;
}
上面的代码将当前进程绑定到第0个CPU核心上。首先使用CPU_ZERO
和CPU_SET
宏来初始化和编辑一个包含CPU核心掩码的数据结构,然后使用sched_setaffinity
系统调用来将当前进程与掩码中的CPU核心绑定。如果绑定操作失败,则会输出错误信息。
pthread_*
线程接口创建线程,在设置线程的CPU亲和性时,需要在线程创建之前调用sched_setaffinity
系统调用。sched_setparam
和sched_setscheduler
来与sched_setaffinity
一起使用。因为它们可能会破坏CPU亲和性的设置。