为什么 Linux 内核无锁列表有头和节点结构?

Why does Linux kernel lock-less list have head and node structs?

我正在尝试了解 Linux 内核中的无锁列表。这在 llist.h 中定义。为什么他们有两个结构,来定义一个列表:

struct llist_head {
    struct llist_node *first;
};

struct llist_node {
    struct llist_node *next;
};

为什么不只使用一个指向下一个节点的结构体呢?它类似于内核中的双向链表实现。

Why do they have two structs, to define a list?

因为可能不同事物使用不同结构(类型)( head 和 node 对应)。 Linux 内核倾向于遵循与通常编程相同的约定。

在双链表的情况下,头和节点都强制具有相同的类型:根据设计,nextprev 字段of struct list_head 可能指向节点或头部。类型单一对他们来说不是优势,而是必要.