-
哈士奇WWW
这是我为了使生活更轻松而制作的包装纸。它的作用是使调用线程被“塞住”到具有id的内核core_id:// core_id = 0, 1, ... n-1, where n is the system's number of coresint stick_this_thread_to_core(int core_id) { int num_cores = sysconf(_SC_NPROCESSORS_ONLN); if (core_id < 0 || core_id >= num_cores) return EINVAL; cpu_set_t cpuset; CPU_ZERO(&cpuset); CPU_SET(core_id, &cpuset); pthread_t current_thread = pthread_self(); return pthread_setaffinity_np(current_thread, sizeof(cpu_set_t), &cpuset);}
-
慕容3067478
假设Linux:设置相似性的界面是-您可能已经发现:int sched_setaffinity(pid_t pid,size_t cpusetsize,cpu_set_t *mask);传递0作为pid,它将仅适用于当前线程,或者让其他线程通过linux特定的调用报告其内核pid pid_t gettid(void);并将其作为pid传递。引用手册页亲和力掩码实际上是每个线程的属性,可以针对线程组中的每个线程分别进行调整。调用gettid(2)返回的值可以在pid参数中传递。将pid指定为0将为调用线程设置属性,并将从调用返回的值传递给getpid(2)将为线程组的主线程设置属性。(如果使用的是POSIX线程API,请使用pthread_setaffinity_np(3)而不是sched_setaffinity()。)
-
倚天杖
//compilation: gcc -o affinity affinity.c -lpthread#define _GNU_SOURCE#include <sched.h> //cpu_set_t , CPU_SET#include <pthread.h> //pthread_t#include <stdio.h>void *th_func(void * arg); int main(void) { pthread_t thread; //the thread pthread_create(&thread,NULL,th_func,NULL); pthread_join(thread,NULL); return 0;}void *th_func(void * arg){ //we can set one or more bits here, each one representing a single CPU cpu_set_t cpuset; //the CPU we whant to use int cpu = 2; CPU_ZERO(&cpuset); //clears the cpuset CPU_SET( cpu , &cpuset); //set CPU 2 on cpuset /* * cpu affinity for the calling thread * first parameter is the pid, 0 = calling thread * second parameter is the size of your cpuset * third param is the cpuset in which your thread will be * placed. Each bit represents a CPU */ sched_setaffinity(0, sizeof(cpuset), &cpuset); while (1); ; //burns the CPU 2 return 0;}在POSIX环境中,可以使用cpusets来控制进程或pthread可以使用哪些CPU。这种类型的控制称为CPU关联。函数“ sched_setaffinity”接收pthread ID和cpuset作为参数。当您在第一个参数中使用0时,调用线程将受到影响