c语言 - 对 sched.h 中的'cpu_set_t'结构定义感到困惑



从我在网上看到的struct.h来看,cpu_set_t是一个包含位掩码的结构体,其中每个位代表一个线程/进程可以使用的CPU。

它是这样定义的:

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

__CPU_BITTYPEunsigned long int

上面的cpu_set_t定义不意味着结构体包含一个大小为CPU_SETSIZE / __CPU_BITS的名为__bits的数组吗?我遗漏了什么?它如何被解释为位场?

是的,它是一个数组。这是考虑到cpu数可能多于整数位数的可能性。

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

当不能将整数类型的元素数量限制在以位为单位的大小时,这通常是C语言中位数组的实现方式。

最新更新