修复线程在某些核心上执行

发布于 2024-11-27 13:34:53 字数 255 浏览 1 评论 0原文

可能的重复:
将线程绑定到处理器

在 Linux 中,是否可以修复线程在某些核心上执行。如果可能的话,我还想知道是否可以在某个核心上专门执行一个线程,即在该线程执行时不允许任何其他线程在该核心上执行。

Possible Duplicate:
Bind threads to processors

In Linux, is it possible to fix threads to execute on certain cores. If that is possible, I also want to know if it is possible to execute one thread exclusively on a certain core, that is disallowing any other thread to execute on that core while that thread is executing.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

两相知 2024-12-04 13:34:53

这就是 pthread_setaffinity_np(3)确实如此。

pthread_setaffinity_np() 函数设置 CPU 亲和性掩码
线程thread指向cpuset指向的CPU集。如果呼叫是
成功,并且该线程当前未在其中一个 CPU 上运行
在 cpuset 中,然后将其迁移到其中一个 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()

That's what pthread_setaffinity_np(3) does.

The pthread_setaffinity_np() function sets the CPU affinity mask of
the thread thread to the CPU set pointed to by cpuset. If the call is
successful, and the thread is not currently running on one of the CPUs
in cpuset, then it is migrated to one of those CPUs.

As an example:

cpu_set_t set;
CPU_ZERO(&set);
CPU_SET(3, &set); /* Run only on the third CPU. */

pthread_setaffinity_np(thr, CPU_SETSIZE, &set);

You can also do it with sched_setaffinity(2) and gettid, but that manual page says:

If you are using the POSIX threads API, then use
pthread_setaffinity_np(3) instead of sched_setaffinity()
.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文