可能是重复问题:
将线程绑定到处理器
在 Linux 中,是否可以将线程固定在某些核心上执行。如果可能的话,我还想知道是否可以将一个线程专门在某个核心上执行,即在该线程执行时禁止任何其他线程在该核心上执行。
pthread_setaffinity_np(3)
的作用。
pthread_setaffinity_np()
函数将线程 thread 的 CPU 亲和力掩码设置为 cpuset 指向的 CPU 集。如果调用成功,并且线程当前没有在 cpuset 中的任何一个 CPU 上运行,则它会被迁移到其中一个 CPU。
例如:
cpu_set_t set;
CPU_ZERO(&set);
CPU_SET(3, &set); /* Run only on the third CPU. */
pthread_setaffinity_np(thr, CPU_SETSIZE, &set);
sched_setaffinity(2)
和gettid
来实现,但是该手册页面指出:
需要注意的是,如果您正在使用POSIX线程API,则应该使用
pthread_setaffinity_np(3)
而不是sched_setaffinity()
pthread_setaffinity_np(3)
与sched_setaffinity()
功能类似,都是用于将线程绑定到指定的处理器核心上。