我正在努力理解Linux内核中的无锁列表。这是在llist.h中定义的。为什么他们有两个结构来定义列表:
struct llist_head {
struct llist_node *first;
};
struct llist_node {
struct llist_node *next;
};
为什么不让一个结构有一个指向下一个节点的指针呢?它类似于内核中的双链表实现。
为什么它们有两个结构来定义列表?
因为有可能为不同的事物(相应的头和节点)使用的不同结构(类型)。Linux内核倾向于遵循与通常编程相同的约定。
在双链表的情况下,头和节点都被强制具有相同的类型:根据设计,struct list_head
的next
和prev
字段可以指向节点或头。单一类型对他们来说不是优势,但是必要的。