Что вы находите странным в этом цикле?
Очевидно, main_arena
- заголовок списка с круговой связью.Чтобы просмотреть круговой список, переходите по следующим ссылкам, пока не окажетесь в начале.Но вы должны выполнить этот тест в конце цикла, потому что условие выхода истинно на первой итерации.
Списки с круговой связью довольно распространены, особенно со списками с двойной связью.Делая список круговым, можно избежать множества специальных проверок для операций вставки и удаления.
В этом случае в каждом элементе списка есть мьютекс, и целью цикла является блокировка всех мьютексов.Вероятно, поэтому эта функция называется lock_all
.
Вы можете написать проверенные в конце циклы с помощью do ... while
, но эта конструкция не позволяет инициализировать переменную цикла.