Lock-free programming threads को mutexes के बिना समन्वित करती है, atomic compare-and-swap (CAS) loops का उपयोग करते हुए ताकि कम से कम एक thread हमेशा प्रगति करे भले ही अन्य रुक जाएँ। कोई thread किसी अन्य द्वारा lock रखने से block नहीं हो सकता।
CAS
Compare-and-swap एक location को एक new value पर atomically तभी सेट करता है जब वह अभी भी अपेक्षित old value रखती हो; अन्यथा यह fail हो जाता है और आप retry करते हैं। यह lock-free stacks, queues, और counters के पीछे का primitive है।
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));
