lock-freeプログラミングは、mutexを使わずにスレッドを協調させます。atomicなcompare-and-swap(CAS)ループを用いることで、他のスレッドが止まっても常に少なくとも1つのスレッドが前進します。 どのスレッドも、ロックを保持する別のスレッドによってブロックされることがありません。
CAS
compare-and-swapは、ある場所が依然として期待どおりの古い値を保持している場合にのみ、その場所を新しい値に原子的に設定します。そうでなければ失敗し、リトライします。これはlock-freeなスタック、キュー、カウンタの背後にあるプリミティブです。
text
CAS(addr, expected, new):
if *addr == expected: *addr = new; return true # atomic, indivisible
else: return false
java
old, next;
{
old = value.get();
next = old + ;
} (!value.compareAndSet(old, next));
