【问题标题】:Confused about the 'cpu_set_t' structure definition in sched.h对 sched.h 中的“cpu_set_t”结构定义感到困惑
【发布时间】:2021-10-14 22:01:44
【问题描述】:

根据我在网上阅读并在 struct.h 中看到的内容,cpu_set_t 是一个包含位掩码的结构,其中每个位代表一个可由线程/进程使用的 CPU。

它是这样定义的:

typedef struct
{ __CPU_BITTYPE  __bits[ CPU_SETSIZE / __CPU_BITS ];
} cpu_set_t

__CPU_BITTYPE 是一个unsigned long int

上面的cpu_set_t 定义不是意味着该结构包含一个名为__bits、大小为CPU_SETSIZE / __CPU_BITS 的数组吗?我在这里想念什么?怎么解释成位域?

【问题讨论】:

    标签: c linux


    【解决方案1】:

    是的,它是一个数组。这是为了考虑到 CPU 的数量可能比整数中的位数多。

    CPU_SETSIZE 是 CPU 集中的 CPU 总数,__CPU_BITS 是每个整数中用于保存位掩码的位数。要访问特定 CPU 的位,请将 CPU 编号除以 __CPU_BITS 以获取数组索引,并将模数用作左移以获取整数中的该位。几乎可以肯定有一个宏可以执行此操作。

    当您无法将元素的数量限制为整数类型的位大小时,这通常是位数组在 C 中的实现方式。

    【讨论】:

    • 好吧,这很有意义!是的,你说得对,有一些宏可以做到这一点(即 CPU_SET、CPU_ZERO 等)。我也对他们的操作感到困惑,因为我不了解cpu_set_t的基本结构。
    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多