Ответ
Compare And Set (CAS) — это атомарная (неразрывная) низкоуровневая операция, которая обновляет значение переменной только в том случае, если её текущее значение совпадает с ожидаемым.
Принцип работы: if (currentValue == expectedValue) { currentValue = newValue; return true; } else { return false; }
Пример в Java (AtomicInteger):
AtomicInteger atomicInt = new AtomicInteger(5);
// Поток 1: Проверяет, равно ли значение 5, и если да, меняет на 10.
boolean success1 = atomicInt.compareAndSet(5, 10); // success1 = true
// Поток 2: Пытается сделать то же самое, но значение уже 10.
boolean success2 = atomicInt.compareAndSet(5, 15); // success2 = false
Ключевые особенности и применение:
- Основа неблокирующих алгоритмов. Поток, получивший
false, может повторить попытку (стратегия loop-and-retry), избегая блокировок (synchronized). - Аппаратная поддержка. Реализуется одной инструкцией процессора (например,
CMPXCHGв x86), что обеспечивает атомарность. - Используется в
java.util.concurrent.atomic(AtomicInteger,AtomicReference), а также внутриConcurrentHashMap,Lock-Freeочередей и других структур из пакетаjava.util.concurrent.