为什么 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 内核倾向于遵循与通常编程相同的约定。
在双链表的情况下,头和节点都强制具有相同的类型:根据设计,next
和 prev
字段of struct list_head
可能指向节点或头部。类型单一对他们来说不是优势,而是必要.
我正在尝试了解 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 内核倾向于遵循与通常编程相同的约定。
在双链表的情况下,头和节点都强制具有相同的类型:根据设计,next
和 prev
字段of struct list_head
可能指向节点或头部。类型单一对他们来说不是优势,而是必要.