Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linux内核中自旋锁的定义_Linux_Linux Kernel_Spinlock - Fatal编程技术网

linux内核中自旋锁的定义

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;

在include/linux/spinlock_types.h中

自旋锁的定义如下所示

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,您的解释非常清楚,非常感谢:)