在 include/linux/spinlock_types.h 中
spinlock_t的定义如下
typedef struct spinlock {
union {
struct raw_spinlock rlock;
struct {
u8 __padding[];
struct lockdep_map dep_map;
};
};
} spinlock_t;
为什么“__padding[]”和“dep_map”变量应该放在一个没有名字的结构中
但不只是像下面这样?
typedef struct spinlock {
union {
struct raw_spinlock rlock;
u8 __padding[];
struct lockdep_map dep_map;
};
} spinlock_t;
有什么特殊意义吗?
谢谢
因为它是两个结构的并集,并且在调试期间启用了另一个结构。您正在尝试做的是创建根本不需要的结构成员。您应该了解我们一次可以使用一个结构的两个结构的联合。
typedef struct spinlock {
union {
struct raw_spinlock rlock;
#ifdef CONFIG_DEBUG_LOCK_ALLOC
# define LOCK_PADSIZE (offsetof(struct raw_spinlock, dep_map))
struct {
u8 __padding[LOCK_PADSIZE];
struct lockdep_map dep_map;
};
#endif
};
} spinlock_t;
我是一名优秀的程序员,十分优秀!