Middle+
Ce este mecanismul CAS (Compare-And-Swap)?
sobes.tech AI
Răspuns de la AI
Mecanismul Compare-And-Swap (CAS) este o operație atomică de mașină utilizată pentru implementarea sincronizării fără blocare.
Principiul de funcționare:
- Citește valoarea curentă a celulei de memorie (expectedValue).
- Încearcă să scrie o nouă valoare (newValue) în această celulă doar dacă valoarea curentă corespunde cu expectedValue.
- Returnează o valoare booleană:
truedacă scrierea a fost reușită (adică, a avut loc o potrivire),falseîn caz contrar.
În Java, CAS este implementat în clasele din pachetul java.util.concurrent.atomic, de exemplu, AtomicInteger, AtomicLong, AtomicReference.
Exemplu de utilizare a 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(); // Citește valoarea curentă
int newValue = expectedValue + 1;
if (count.compareAndSet(expectedValue, newValue)) {
// Dacă valoarea curentă nu s-a schimbat de la citire,
// efectuează scrierea și iese din buclă
break;
}
// Dacă valoarea s-a schimbat, încearcă din nou
}
}
}
Avantaje:
- Non-blocant: firele nu se blochează reciproc, reducând costurile de schimbare a contextului, mai ales în cazul concurenței scăzute.
- Evită problemele de deadlock.
Dezavantaje:
- Problema ABA: dacă valoarea celulei se schimbă de la A la B și apoi înapoi la A, CAS va considera că nu au avut loc schimbări. Pentru a rezolva această problemă, se folosesc clase precum
AtomicStampedReferencesauAtomicMarkableReference. - Pot apărea un număr mare de încercări nereușite (spin loops) în cazul unei concurențe ridicate.