Sobes.tech
Middle+

Co je to mechanismus CAS (Compare-And-Swap)?

sobes.tech AI

Odpověď od AI

Mechanismus Compare-And-Swap (CAS) je atomová operace stroje, která se používá k implementaci nek blokující synchronizace.

Princip fungování:

  1. Přečte aktuální hodnotu paměťové buňky (expectedValue).
  2. Pokusí se zapsat novou hodnotu (newValue) do této buňky pouze pokud aktuální hodnota odpovídá expectedValue.
  3. Vrací logickou hodnotu: true, pokud zápis proběhl úspěšně (tedy došlo ke shodě), false v opačném případě.

V jazyce Java je CAS implementován ve třídách z balíčku java.util.concurrent.atomic, například AtomicInteger, AtomicLong, AtomicReference.

Příklad použití 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(); // Čte aktuální hodnotu
            int newValue = expectedValue + 1;
            if (count.compareAndSet(expectedValue, newValue)) {
                // Pokud se aktuální hodnota od posledního čtení nezměnila,
                // provede zápis a opustí smyčku
                break;
            }
            // Pokud se hodnota změnila, pokusí se znovu
        }
    }
}

Výhody:

  • Nek blokující: vlákna se navzájem nezablokují, což snižuje náklady na přepínání kontextu, zejména při nízké konkurenci.
  • Vyhýbá se problémům s deadlockem.

Nevýhody:

  • ABA problém: pokud se hodnota buňky změní z A na B a poté zpět na A, CAS si myslí, že nedošlo ke změně. Tento problém řeší třídy jako AtomicStampedReference nebo AtomicMarkableReference.
  • Při vysoké konkurenci může dojít k velkému počtu neúspěšných pokusů (spin loops).