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í:
- Přečte aktuální hodnotu paměťové buňky (expectedValue).
- Pokusí se zapsat novou hodnotu (newValue) do této buňky pouze pokud aktuální hodnota odpovídá expectedValue.
- Vrací logickou hodnotu:
true, pokud zápis proběhl úspěšně (tedy došlo ke shodě),falsev 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
AtomicStampedReferenceneboAtomicMarkableReference. - Při vysoké konkurenci může dojít k velkému počtu neúspěšných pokusů (spin loops).