list_for_each vs list_for_each_safe, откуда берется безопасность? - PullRequest
0 голосов
/ 19 октября 2019

Я не уверен, как * _safe-варианты кода обхода связанного списка в ядре Linux обеспечивают дополнительные гарантии безопасности.

Кто-нибудь может объяснить это для моего простого ума?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 19 октября 2019

Из описания функции в include / linux / list.h :

list_for_each_safe - перебирать список, безопасный от удаления записи списка

То есть во время итерации с list_for_each_safe вам разрешено удалить текущий итерированный элемент. Это не допускается, когда повторяется с простым list_for_each.

1 голос
/ 19 октября 2019

Если вы внимательно посмотрите на реализацию, вы увидите, что варианты *_safe используют временную переменную для хранения текущего элемента списка. Таким образом, если вы решите удалить текущий элемент списка во время обхода списка, то целостность списка - возможность получить следующий элемент из текущего - останется без изменений. Небезопасные варианты просто получают следующий элемент из текущего, что является недопустимым действием в случае, если текущий элемент удален и, скорее всего, освобожден.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...