Lock-free программирование координирует потоки без мьютексов, используя атомарные циклы compare-and-swap (CAS), так что хотя бы один поток всегда продвигается, даже если другие застревают. Ни один поток не может быть заблокирован другим, удерживающим блокировку.
CAS
Compare-and-swap атомарно устанавливает ячейку в новое значение только если она всё ещё содержит ожидаемое старое значение; иначе он терпит неудачу, и вы повторяете. Это примитив, стоящий за lock-free стеками, очередями и счётчиками.
CAS(addr, expected, new):
if *addr == expected: *addr = new; return true # атомарно, неделимо
else: return false
