【问题标题】:C++'ish idiom for setting core affinity?用于设置核心亲和力的 C++'ish 习语?
【发布时间】:2025-12-09 00:40:01
【问题描述】:

考虑以下代码:

cpu_set_t cpuset; 

CPU_ZERO(&cpuset);
CPU_SET(0, &cpuset);
sched_setaffinity(0, sizeof(cpuset), &cpuset);

这设置了进程的处理器亲和性——基本上允许在其上调度的内核。它使用GNU C library facility(但我不确定所有支持 glibc 的操作系统都支持它)。现在,我很确定 C++ 标准库没有提供类似的工具,但是 - 做同样事情的常见的、更多的 C++ 风格是什么?

【问题讨论】:

  • 根本没有。 C++ 只是不处理这个问题。
  • 在 Linux 下,要将进程的亲和性设置为特定的核心或核心范围,请考虑使用任务集。例如taskset ./main -c 0-1 用于将 main 限制为核心 0 和 1
  • @Daniel:这会调用./main,还是适用于未来的调用?
  • taskset 使用指定的 CPU 掩码运行您的下一个命令。它仅适用于该特定命令实例。如果您想在每次运行程序时都应用绑定,您应该使用sched_setaffinitypthread_setaffinity_np

标签: c++ boost multicore idioms affinity


【解决方案1】:

C++ 标准库中没有这样的功能。另外,请注意,C 标准库中也没有这样的功能。它由 glibc 提供,但不是作为 C 标准库的角色:它是 Linux 的一部分,而不是 C 标准的一部分。

【讨论】:

  • @Someprogrammerdude:你是说 glibc 在其他 Unix'ish 操作系统上实际上并不支持这个?还是在 Windows 上?
  • @einpoklum sched_setaffinity 函数是特定于 Linux 的。它不是 Windows、POSIX 或任何其他标准的一部分。不过,其他操作系统很可能有自己的变体。
  • @Someprogrammerdude: ...好的,没有什么标准的东西可以包装那些特定于操作系统的调用。