La programmazione lock-free coordina i thread senza mutex, usando loop atomici di compare-and-swap (CAS) così che almeno un thread faccia sempre progressi anche se gli altri si bloccano. Nessun thread può essere bloccato da un altro che detiene un lock.
CAS
Compare-and-swap imposta atomicamente una locazione a un nuovo valore solo se contiene ancora il vecchio valore atteso; altrimenti fallisce e devi riprovare. È la primitiva alla base di stack, code e contatori lock-free.
CAS(addr, expected, new):
if *addr == expected: *addr = new; return true # atomico, indivisibile
else: return false
