0

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

struct llist_head {
    struct llist_node *first;
};

struct llist_node {
    struct llist_node *next;
};

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

4

1 回答 1

0

为什么他们有两个结构来定义一个列表?

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

在双链表的情况下,head 和 node 都必须具有相同的类型:根据设计,两者的nextprev字段都struct list_head可以指向 node 或 head。单一类型对他们来说不是优势,而是必然

于 2016-08-03T18:10:47.780 回答