添加到无锁列表的尾部

时间:2016-08-04 15:31:47

标签: linux algorithm linked-list linux-kernel lockless

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

1 个答案:

答案 0 :(得分:2)

  

如何在恒定时间内添加到列表的尾部?

你不能。

llist的无锁属性是以降低功能为代价的:只支持添加到开头,删除第一个元素并删除所有元素。即使这种减少也不足以让它无锁总是,请参阅标题inclide/linux/llist.h开头的描述。

实际上,某些对象的无锁属性很少需要。在大多数情况下,自旋锁的使用是可以接受的。如果是您的情况,您可以使用由螺旋锁保护的双链表llist,而不是无锁list_head。双链表存储指向最后一个元素的指针,并支持在其后添加(函数list_add_tail)。