Lock-free programming coördineert threads zonder mutexes, met atomic compare-and-swap (CAS)-lussen zodat ten minste één thread altijd vooruitgang boekt, zelfs als anderen stilvallen. Geen enkele thread kan geblokkeerd worden door een ander die een lock vasthoudt.
CAS
Compare-and-swap zet een locatie atomair op een nieuwe waarde alleen als hij nog steeds de verwachte oude waarde bevat; anders faalt hij en probeer je opnieuw. Het is het primitief achter lock-free stacks, queues en counters.
CAS(addr, expected, new):
if *addr == expected: *addr = new; return true # atomic, indivisible
else: return false
