Middle+
Čo je mechanizmus CAS (Compare-And-Swap)?
sobes.tech AI
Odpoveď od AI
Mechanizmus Compare-And-Swap (CAS) je atómová operácia stroja, ktorá sa používa na implementáciu nek blokujúcej synchronizácie.
Princíp fungovania:
- Číta aktuálnu hodnotu pamäťovej bunky (expectedValue).
- Pokúša sa zapísať novú hodnotu (newValue) do tejto bunky len ak aktuálna hodnota zodpovedá expectedValue.
- Vráti logickú hodnotu:
true, ak zápis bol úspešný (t.j. došlo k zhode),falseinak.
V jazyku Java je CAS implementovaný v triedach z balíčka java.util.concurrent.atomic, napríklad AtomicInteger, AtomicLong, AtomicReference.
Príklad použitia 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(); // Čítame aktuálnu hodnotu
int newValue = expectedValue + 1;
if (count.compareAndSet(expectedValue, newValue)) {
// Ak sa aktuálna hodnota od posledného čítania nezmenila,
// vykoná zápis a opustí slučku
break;
}
// Ak sa hodnota zmenila, skúsiť znova
}
}
}
Výhody:
- Nek blokujúci: vlákna sa navzájom nezablokujú, čo znižuje náklady na prepínanie kontextov, najmä pri nízkej konkurencii.
- Vyhýba sa problémom s deadlockom.
Nevýhody:
- ABA problém: ak sa hodnota bunky zmení z A na B a potom späť na A, CAS si myslí, že nedošlo ku zmene. Tento problém riešia triedy ako
AtomicStampedReferencealeboAtomicMarkableReference. - Pri vysokej konkurencii môže dôjsť k veľkému počtu neúspešných pokusov (spin loops).