락프리 프로그래밍은 뮤텍스 없이 스레드를 조율하며, 원자적 compare-and-swap(CAS) 루프를 사용하여 다른 스레드들이 멈춰도 항상 최소한 하나의 스레드는 진전을 이룹니다. 어떤 스레드도 락을 쥔 다른 스레드에 의해 블로킹될 수 없습니다.
CAS
Compare-and-swap는 어떤 위치가 여전히 예상한 이전 값을 담고 있을 때만 원자적으로 그 위치를 새 값으로 설정하고, 그렇지 않으면 실패하여 재시도하게 합니다. 락프리 스택, 큐, 카운터 뒤에 있는 기본 요소입니다.
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));
