Programação lock-free coordena threads sem mutexes, usando loops atômicos de compare-and-swap (CAS) para que ao menos uma thread sempre progrida mesmo se outras travarem. Nenhuma thread pode ser bloqueada por outra segurando um lock.
CAS
Compare-and-swap define atomicamente uma posição para um novo valor apenas se ela ainda contém o valor antigo esperado; caso contrário falha e você retenta. É a primitiva por trás de stacks, filas e contadores lock-free.
CAS(addr, expected, new):
if *addr == expected: *addr = new; return true # atomic, indivisible
else: return false
old, next;
{
old = value.get();
next = old + ;
} (!value.compareAndSet(old, next));
