Middle+
O que é o mecanismo CAS (Compare-And-Swap)?
sobes.tech IA
Resposta da IA
O mecanismo Compare-And-Swap (CAS) é uma operação atómica de máquina usada para implementar sincronização sem bloqueio.
Princípio de funcionamento:
- Lê o valor atual da célula de memória (expectedValue).
- Tenta escrever um novo valor (newValue) nessa célula apenas se o valor atual corresponder a expectedValue.
- Retorna um valor booleano:
truese a escrita for bem-sucedida (ou seja, houve correspondência),falsecaso contrário.
Em Java, CAS é implementado em classes do pacote java.util.concurrent.atomic, por exemplo, AtomicInteger, AtomicLong, AtomicReference.
Exemplo de uso de 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(); // Lê o valor atual
int newValue = expectedValue + 1;
if (count.compareAndSet(expectedValue, newValue)) {
// Se o valor atual não mudou desde a leitura,
// realiza a escrita e sai do ciclo
break;
}
// Se o valor mudou, tenta novamente
}
}
}
Vantagens:
- Não bloqueante: os threads não bloqueiam uns aos outros, reduzindo os custos de troca de contexto, especialmente em baixa concorrência.
- Evita problemas de deadlock.
Desvantagens:
- Problema ABA: se o valor da célula muda de A para B e depois volta a A, CAS pensará que não houve mudanças. Para resolver esse problema, usam-se classes como
AtomicStampedReferenceouAtomicMarkableReference. - Pode ocorrer um grande número de tentativas falhadas (spin loops) em alta concorrência.