修复线程以在特定核心上执行

4

可能是重复问题:
将线程绑定到处理器

在 Linux 中,是否可以将线程固定在某些核心上执行。如果可能的话,我还想知道是否可以将一个线程专门在某个核心上执行,即在该线程执行时禁止任何其他线程在该核心上执行。


值得注意的是,调度程序的工作是以高效的方式将线程分配给 CPU。您有需要怀疑它的原因吗? - R.. GitHub STOP HELPING ICE
1个回答

3
这就是 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()功能类似,都是用于将线程绑定到指定的处理器核心上。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接