Lock-free programming mutexes शिवाय threads समन्वयित करते, atomic compare-and-swap (CAS) loops वापरून जेणेकरून इतर अडकले तरी किमान एक thread नेहमी प्रगती करतो. कोणत्याही thread ला lock धरून ठेवणाऱ्या दुसऱ्याकडून block करता येत नाही.
CAS
Compare-and-swap एका location ला atomically नवीन value वर सेट करते फक्त जर तिच्यात अजूनही अपेक्षित जुनी value असेल तर; अन्यथा ते fail होते आणि तुम्ही पुन्हा प्रयत्न करता. हे 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));
