添加到无锁列表的尾部

Add to tail of lock-less list

我正在使用 Linux 内核的无锁列表,如 llist.h 中所定义。 llist_add 添加到列表中,但它会在头部之后添加新节点。如何在恒定时间内添加到列表的尾部?

How can I add to the tail of the list in constant time?

你不能。

llist 的无锁 属性 是以功能减少为代价的:仅支持开头添加、删除第一个元素和删除所有元素。即使这种减少也不足以使其无锁 always,请参阅 header inclide/linux/llist.h.

开头的描述

实际上,某些 objects 的无锁 属性 很少是必需的 。在大多数情况下,自旋锁的使用是可以接受的。如果是您的情况,您可以使用受自旋锁保护的 double-linked 列表 list_head 而不是无锁 llist。 Double-linked 列表存储指向最后一个元素的指针并支持在它之后添加(函数 list_add_tail)。