添加到无锁列表的尾部



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

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

你不能。

llist的无锁定属性是以减少功能为代价的:只支持添加开头、删除第一个元素和删除所有元素。即使这样的减少也不足以使其无锁定始终,请参阅标题开头的描述inclide/linux/list.h。

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

相关内容

  • 没有找到相关文章

最新更新