我到处找,但似乎不能这样做。我想避免的是
"通过fork(2)创建的子线程会继承父线程的CPU亲和性掩码"
来源是这样的 https:/manpages.debian.orgtestingmanpages-devsched_setaffinity.2.en.html。
你可以简单地将亲和力设置回 "所有可用处理器"。
一种选择可能是计算出你所有的逻辑处理器,然后使用该位面掩码,但它可以更简单,如 人页 中包含了这些有用的注释(重点是我的)。
调用 sched_setaffinity()后,进程实际运行的 CPU 集合为 掩码参数中指定的集合与系统中实际存在的CPU集合的交点。. 如果使用了cpuset(7)中描述的 "cpuset "机制,系统可以进一步限制进程运行的CPU集。 这些对进程实际运行的CPU集的限制是由内核默默施加的。
所以你可以只发送一个位掩码为 0xffff...
方便地说,是整数的 -1
. 我建议使用 long
值为-1,但如果你知道你的系统的处理器数量少于32个,你可以使用 int
.