Middle+
Wat is het CAS-mechanisme (Compare-And-Swap)?
sobes.tech AI
Antwoord van AI
Compare-And-Swap (CAS) mechanisme is een atomische machine-operatie die wordt gebruikt voor het implementeren van lockvrije synchronisatie.
Werking principe:
- Leest de huidige waarde van de geheugenlocatie (expectedValue).
- Probeert een nieuwe waarde (newValue) te schrijven in die locatie alleen als de huidige waarde overeenkomt met expectedValue.
- Geeft een boolean waarde terug:
trueals de write succesvol is (d.w.z. er was een overeenkomst),falseanders.
In Java wordt CAS geïmplementeerd in klassen uit het pakket java.util.concurrent.atomic, bijvoorbeeld AtomicInteger, AtomicLong, AtomicReference.
Voorbeeld van gebruik van AtomicInteger:
// java
import java.util.concurrent.atomic.AtomicInteger;
public class CasExample {
private AtomicInteger count = new AtomicInteger(0);
public void increment() {
while (true) {
int expectedValue = count.get(); // Leest de huidige waarde
int newValue = expectedValue + 1;
if (count.compareAndSet(expectedValue, newValue)) {
// Als de huidige waarde niet is veranderd sinds het lezen,
// voert het schrijven uit en verlaat de lus
break;
}
// Als de waarde is veranderd, probeer opnieuw
}
}
}
Voordelen:
- Niet-blokkerend: threads blokkeren elkaar niet, wat de overhead van context-switching vermindert, vooral bij lage concurrentie.
- Vermijdt problemen met deadlock.
Nadelen:
- ABA-probleem: als de waarde van de cel verandert van A naar B en vervolgens terug naar A, zal CAS denken dat er geen verandering is geweest. Om dit op te lossen, worden klassen zoals
AtomicStampedReferenceofAtomicMarkableReferencegebruikt. - Kan leiden tot veel mislukte pogingen (spin loops) bij hoge concurrentie.