【发布时间】: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_setaffinity或pthread_setaffinity_np。
标签: c++ boost multicore idioms affinity