我如何用sched_setaffinity清除线程亲和力,也就是说我想把控制权还给内核?

问题描述 投票:0回答:1

我到处找,但似乎不能这样做。我想避免的是

"通过fork(2)创建的子线程会继承父线程的CPU亲和性掩码"

来源是这样的 https:/manpages.debian.orgtestingmanpages-devsched_setaffinity.2.en.html。

java linux kernel real-time jna
1个回答
0
投票

你可以简单地将亲和力设置回 "所有可用处理器"。

一种选择可能是计算出你所有的逻辑处理器,然后使用该位面掩码,但它可以更简单,如 人页 中包含了这些有用的注释(重点是我的)。

调用 sched_setaffinity()后,进程实际运行的 CPU 集合为 掩码参数中指定的集合与系统中实际存在的CPU集合的交点。. 如果使用了cpuset(7)中描述的 "cpuset "机制,系统可以进一步限制进程运行的CPU集。 这些对进程实际运行的CPU集的限制是由内核默默施加的。

所以你可以只发送一个位掩码为 0xffff... 方便地说,是整数的 -1. 我建议使用 long 值为-1,但如果你知道你的系统的处理器数量少于32个,你可以使用 int.

© www.soinside.com 2019 - 2024. All rights reserved.