我正在使用 Linux 内核的无锁列表,如llist.h
. llist_add
添加到列表中,但它在头部之后添加新节点。如何在恒定时间内添加到列表的尾部?
问问题
739 次
1 回答
2
如何在恒定时间内添加到列表的尾部?
你不能。
's 的无锁属性llist
是以减少功能为代价的:仅支持添加开头、删除第一个元素和删除所有元素。即使这种减少也不足以使其始终无锁,请参阅标题inclide/linux/llist.h开头的描述。
实际上,某些对象的无锁属性很少是必需的。在大多数情况下,使用自旋锁是可以接受的。如果是您的情况,llist
您可以使用受自旋锁保护的双链表,而不是 lockfree list_head
。双链表存储指向最后一个元素的指针并支持在它之后添加(函数list_add_tail
)。
于 2016-08-04T17:33:01.217 回答