Programarea lock-free coordonează thread-urile fără mutex-uri, folosind bucle atomice de compare-and-swap (CAS) astfel încât cel puțin un thread să progreseze mereu, chiar dacă altele stagnează. Niciun thread nu poate fi blocat de altul care ține un lock.
CAS
Compare-and-swap setează atomic o locație la o valoare nouă doar dacă ea încă deține valoarea veche așteptată; altfel eșuează și reîncerci. Este primitiva din spatele stivelor, cozilor și contoarelor lock-free.
CAS(addr, expected, new):
if *addr == expected: *addr = new; return true # atomic, indivizibil
else: return false
old, next;
{
old = value.get();
next = old + ;
} (!value.compareAndSet(old, next));
