La programación lock-free coordina hilos sin mutexes, usando bucles atómicos de compare-and-swap (CAS) para que al menos un hilo siempre avance aunque otros se estanquen. Ningún hilo puede ser bloqueado por otro que retenga un lock.
CAS
Compare-and-swap fija atómicamente una posición a un nuevo valor solo si todavía contiene el valor antiguo esperado; en caso contrario falla y reintentas. Es la primitiva detrás de pilas, colas y 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));
