Sobes.tech
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:

  1. Leest de huidige waarde van de geheugenlocatie (expectedValue).
  2. Probeert een nieuwe waarde (newValue) te schrijven in die locatie alleen als de huidige waarde overeenkomt met expectedValue.
  3. Geeft een boolean waarde terug: true als de write succesvol is (d.w.z. er was een overeenkomst), false anders.

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 AtomicStampedReference of AtomicMarkableReference gebruikt.
  • Kan leiden tot veel mislukte pogingen (spin loops) bij hoge concurrentie.