Lock-free-programmering koordinerer tråder uten mutexes, ved hjelp av atomiske compare-and-swap (CAS)-løkker slik at minst én tråd alltid gjør fremgang selv om andre stopper opp. Ingen tråd kan blokkeres av en annen som holder en lås.
CAS
Compare-and-swap setter atomisk en lokasjon til en ny verdi bare hvis den fortsatt holder den forventede gamle verdien; ellers feiler den og du prøver på nytt. Det er primitivet bak lock-free stacks, køer og tellere.
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));
