Lock-freie Programmierung koordiniert Threads ohne Mutexe, indem sie atomare Compare-and-Swap-Schleifen (CAS) nutzt, sodass mindestens ein Thread immer Fortschritt macht, selbst wenn andere ins Stocken geraten. Kein Thread kann durch einen anderen, der ein Lock hält, blockiert werden.
CAS
Compare-and-Swap setzt eine Stelle atomar auf einen neuen Wert, aber nur, wenn sie noch den erwarteten alten Wert enthält; andernfalls schlägt es fehl und du versuchst es erneut. Es ist das Primitiv hinter lock-freien Stacks, Queues und Zählern.
CAS(addr, expected, new):
if *addr == expected: *addr = new; return true # atomic, indivisible
else: return false
