Я использую список блокировки ядра Linux, как определено в llist.h
. llist_add
добавляет в список, но добавляет новый узел сразу после заголовка. Как добавить хвост списка в постоянное время?Добавить в конец списка блокировки
0
A
ответ
2
Как добавить хвост списка в постоянное время?
Вы не можете.
Объект Lockless для llist
заходит за рамки сокращенной функциональности: поддерживается только добавление к началу, удаление первого элемента и удаление всех элементов. И даже этого сокращения недостаточно, чтобы сделать его незаблокированным всегда, см. Описание в начале заголовка inclide/linux/llist.h.
На самом деле, незащищенное имущество некоторых объектов редко требуется. В большинстве случаев использование штифтов является приемлемым. Если это ваш случай, вместо lockfree llist
вы можете использовать списки с двойной связью list_head
, защищенные прямыми замками. В двойных списках хранится указатель на последний элемент и поддерживается после него (функция list_add_tail
).
В настоящее время мы используем спин-блокировки с '' '' list_head''', но искали способы устранить/уменьшить блокировку. – user2233706
Возможно, RCU может помочь? – 0andriy