Ich versuche, die Lockless-Liste im Linux-Kernel zu verstehen. Dies ist in llist.h definiert. Warum haben sie zwei Strukturen, eine Liste zu definieren:Warum hat die Sperrliste des Linux-Kernels Kopf- und Knotenstrukturen?
struct llist_head {
struct llist_node *first;
};
struct llist_node {
struct llist_node *next;
};
Warum nicht nur eine Struktur haben, die einen Zeiger auf den nächsten Knoten hat? Es wäre ähnlich der doppelt verknüpften Liste Implementierung im Kernel.
Stellen Sie sich vor, die Liste ist leer, z. Es gibt keinen einzigen "Knoten" darin ... – fukanchik
Die doppelt verkettete Listenimplementierung des Kernels (nicht lock-less) behandelt leere Listen, ohne zwei Strukturen zu haben. – user2233706
Schauen Sie, dass Feldnamen unterschiedlich benannt sind. Stellen Sie sich vor, Sie möchten das erste Element "first" und nicht "next" nennen. Dies verhindert einige Fehler, die von der ** Kopieren & Einfügen ** -Programmierung stammen, da die Identifikatoren im _other_-Kontext nicht gültig sind. –