同时定义了一系列的宏来用于操作进程的可调度CPU集合: #define _GNU_SOURCE#include<sched.h>voidCPU_ZERO(cpu_set_t*set);voidCPU_SET(intcpu,cpu_set_t*set);voidCPU_CLR(intcpu,cpu_set_t*set);intCPU_ISSET(intcpu,cpu_set_t*set);intCPU_COUNT(cpu_set_t*set); 具体的作用如下: CPU_ZERO...
绑定进程主要是通过三个函数,这三个函数都是在线程函数里面调用的 CPU_ZERO(&cpu_size_t) cpu初始化,将这个cpu置为空 CPU_SET(int,cpu_size_t&) int是cpu核的编号,这是一个设置具体哪个核的过程。专业名词叫亲和力,线程绑定核都是通过亲和力来完成的 sched_setaffinity(int,sizeof(cpu_set_t),&cpu_set_...
一个CPU的亲合力掩码用一个cpu_set_t结构体来表示一个CPU集合,下面的几个宏分别对这个掩码集进行操作: cpu_set_t mask; CPU_ZERO(&mask) 清空一个集合 CPU_SET(0, &mask) 将cpu0添加到集合mask中,本质为对应bit置1 CPU_CLR(0, &mask); 将cpu0从集合mask中移除,本质为对应bit清零 CPU_ISSET(1, &...
1#include <sched.h>234voidCPU_ZERO(cpu_set_t *set);5voidCPU_CLR(intcpu, cpu_set_t *set);6voidCPU_SET(intcpu, cpu_set_t *set);7intCPU_ISSET(intcpu, cpu_set_t *set);89intsched_getaffinity(pid_t pid, unsignedintcpusetsize, cpu_set_t *mask);1011intsched_setaffinity(pid_t...
/* 设置进程号为pid的进程运行在mask所设定的CPU上 * 第二个参数cpusetsize是mask所指定的数的长度 * 通常设定为sizeof(cpu_set_t) * 如果pid的值为0,则表示指定的是当前进程 */ int sched_setaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask); ...
sched_setaffinity可以将某个进程绑定到一个特定的CPU。 #define _GNU_SOURCE/* See feature_test_macros(7) */ #include <sched.h> /* 设置进程号为pid的进程运行在mask所设定的CPU上 * 第二个参数cpusetsize是mask所指定的数的长度 * 通常设定为sizeof(cpu_set_t) ...
CPU_SET(0, &cpus); //绑定到第1个CPU核心 pthread_attr_setaffinity_np(&attr, sizeof(cpu_set_t), &cpus); pthread_create(&thread, &attr, start_routine, arg); “` 在上述示例代码中,线程将被绑定到第1个CPU核心。 3. numactl命令:
于是我把这 4 个线程都绑定到 CPU0 上去,也就是设置 CPU 亲和性。 在线程入口函数 thread_routine 的开头,增加下面的代码: cpu_set_t mask; int cpus = sysconf(_SC_NPROCESSORS_CONF); CPU_ZERO(&mask); CPU_SET(0, &mask); if (pthread_setaffinity_np(pthread_self(), sizeof(mask), &mask) ...
以下是一个使用sched_setaffinity系统调用设置CPU亲和性的示例代码: 代码语言:txt 复制 #include <stdio.h> #include <stdlib.h> #include <sched.h> #include <unistd.h> void set_cpu_affinity(int cpu_id) { cpu_set_t mask; CPU_ZERO(&mask); CPU_SET(cpu_id, &mask); if (sched_setaffinity(0...
#include <stdio.h> #include <stdlib.h> #include <sched.h> int main() { cpu_set_t cpuset; CPU_ZERO(&cpuset); // 清空CPU集合 CPU_SET(0, &cpuset); // 将CPU 0添加到集合中 if (sched_setaffinity(0, sizeof(cpu_set_t), &cpuset) == -1) { perror("sched_setaffinity"); exit(EX...