0
我使用的是在llist.h
中定義的Linux內核的無鎖列表。 llist_add
將添加到列表中,但它會在頭後添加新節點。我如何在常量時間內添加到列表尾部?添加到無鎖列表的尾部
我使用的是在llist.h
中定義的Linux內核的無鎖列表。 llist_add
將添加到列表中,但它會在頭後添加新節點。我如何在常量時間內添加到列表尾部?添加到無鎖列表的尾部
如何在常量時間內添加到列表尾部?
你不行。
llist
的無鎖屬性以降低功能爲代價:只支持開始時刪除第一個元素和刪除所有元素。並且即使這種減少也不足以使其無鎖始終爲,請參閱標頭inclide/linux/llist.h開頭的說明。
其實,一些物體的無鎖屬性很少是。在大多數情況下,自旋鎖的使用是可以接受的。如果是你的情況,而不是無鎖llist
,你可以使用雙鏈表list_head
,受自旋鎖保護。雙鏈表存儲指向最後一個元素的指針並支持其後的添加(功能list_add_tail
)。
我們目前正在使用'''list_head'''自旋鎖,但正在尋找消除/減少鎖的方法。 – user2233706
也許RCU可以幫忙嗎? – 0andriy