linux内核中自旋锁的定义
在include/linux/spinlock_types.h中 自旋锁的定义如下所示linux内核中自旋锁的定义,linux,linux-kernel,spinlock,Linux,Linux Kernel,Spinlock,在include/linux/spinlock_types.h中 自旋锁的定义如下所示 typedef struct spinlock { union { struct raw_spinlock rlock; struct { u8 __padding[]; struct lockdep_map dep_map;
typedef struct spinlock {
union {
struct raw_spinlock rlock;
struct {
u8 __padding[];
struct lockdep_map dep_map;
};
};
} spinlock_t;
为什么“\uu padding[]”和“dep\u 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;
因为它是两个结构的并集,并且在调试期间启用了另一个结构。 你们要做的是创建一个根本不需要的结构成员。你们应该明白,在两个结构的联合中,我们可以一次使用一个
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;
但不只是像下面那样?
-在您的代码字段中,\u padding
和dep\u map
是并集的(放在同一地址),而在原始代码中,它们属于单一结构,因此具有顺序布局。至于缺少结构的字段名,它简化了对内部字段的引用:lock->dep_-map
而不是lock->field_-name->dep_-map
。嗨,Tsyvarev,你的解释很清楚,非常感谢:),但不仅仅像下面那样?
-在你的代码字段中\u-padding
和dep_-map
是联合的(放置在同一地址),而在原始代码中它们属于单一结构,因此具有顺序布局。对于结构字段名称的缺失,它简化了对内部字段的引用:lock->dep\u map
,而不是lock->field\u name->dep\u map
。嗨,Tsyvarev,您的解释非常清楚,非常感谢:)