linux - linux内核中spinlock_t的定义

标签 linux linux-kernel spinlock

在 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;

关于linux - linux内核中spinlock_t的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41737182/

相关文章:

linux - 如何创建具有指定文件大小的损坏文件?

php - PDOStatement::nextRowset() 不适用于 dblib 和 MSSQL

c# - Web 服务 asmx 不适用于单声道 4.2.3.4 Debian 8.2

linux - TCP_NEW_SYN_RECV 是什么意思?

locking - 比 pthreads 更快的锁定

c++ - C++ 中的公平读写器票证自旋锁运行缓慢

对于大于 4GiB 的数组,在 64 位系统上调用 calloc 失败

debugging - utrace 项目死了吗?

linux-kernel - linux 内核等待队列 - printk 未显示在消息日志中

gcc - 使用 cmpxchg 的 x86 自旋锁