Lock-free programming ले mutexes बिना threads समन्वय गर्छ, atomic compare-and-swap (CAS) loops प्रयोग गरेर ताकि अरू अड्किए पनि कम्तीमा एउटा thread ले सधैं प्रगति गरोस्। कुनै thread लाई lock समातेको अर्कोले block गर्न सक्दैन।
CAS
Compare-and-swap ले कुनै location लाई नयाँ मानमा atomically सेट गर्छ यदि यसमा अझै अपेक्षित पुरानो मान छ भने मात्र; नत्र यो 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));
