2016-08-04 2 views

ответ

2

Как добавить хвост списка в постоянное время?

Вы не можете.

Объект Lockless для llist заходит за рамки сокращенной функциональности: поддерживается только добавление к началу, удаление первого элемента и удаление всех элементов. И даже этого сокращения недостаточно, чтобы сделать его незаблокированным всегда, см. Описание в начале заголовка inclide/linux/llist.h.

На самом деле, незащищенное имущество некоторых объектов редко требуется. В большинстве случаев использование штифтов является приемлемым. Если это ваш случай, вместо lockfree llist вы можете использовать списки с двойной связью list_head, защищенные прямыми замками. В двойных списках хранится указатель на последний элемент и поддерживается после него (функция list_add_tail).

+0

В настоящее время мы используем спин-блокировки с '' '' list_head''', но искали способы устранить/уменьшить блокировку. – user2233706

+0

Возможно, RCU может помочь? – 0andriy