linux线程绑定cpu
函数介绍
#define __USE_GNU
#include <sched.h>
void CPU_ZERO(cpu_set_t *set);
void CPU_SET(int cpu, cpu_set_t *set);
void CPU_CLR(int cpu, cpu_set_t *set);
int CPU_ISSET(int cpu, cpu_set_t *set);
法一
int cpu = 0;
cpu_set_t mask;
CPU_ZERO(&mask);
CPU_SET(cpu, &mask);
if(pthread_setaffinity_np(pthread_self(), sizeof(mask), &mask) < 0)
{
perror("pthread_setaffinity_np");
}
法二
int cpu = 1;
cpu_set_t mask;
CPU_ZERO(&mask);
CPU_SET(cpu, &mask);
sched_setaffinity(0, sizeof(cpu_set_t), &mask);
int cpu:
指定cpu使用。可以只使用一个核,也可以同时指定多核。实测还是指定一个核效果更好
线程中使用
void *func(void *ptr)
{
pthread_detach(pthread_self());
cpu_set_t mask;
CPU_ZERO(&mask);
CPU_SET(1, &mask);
#if 0
if(pthread_setaffinity_np(pthread_self(), sizeof(mask), &mask) < 0)
{
perror("pthread_setaffinity_np");
}
#else
sched_setaffinity(0, sizeof(cpu_set_t), &mask);
#endif
while(1);
}