Lock-free-programmering koordinerar trådar utan mutexar, med atomära compare-and-swap (CAS)-loopar så att minst en tråd alltid gör framsteg även om andra stannar. Ingen tråd kan blockeras av en annan som håller ett lås.
CAS
Compare-and-swap sätter atomärt en plats till ett nytt värde endast om den fortfarande håller det förväntade gamla värdet; annars misslyckas den och du försöker igen. Det är primitiven bakom lock-free-stackar, -köer och -räknare.
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));
