📌 CAS

CAS (Compare-And-Swap) — атомарная операция, применяемая в многопоточных средах для синхронизации данных без использования Lock или Mutex. Используется в реализациях Spinlock, lock-free структур и протоколов.

🧠 Как работает

CAS принимает три аргумента:

  1. Адрес (memory location)
  2. Ожидаемое значение
  3. Новое значение

CAS сравнивает текущее значение по адресу с ожидаемым, и если они равны — заменяет его на новое. Всё происходит атомарно.

// Псевдокод
bool CAS(addr, expected, new) {
    if (*addr == expected) {
        *addr = new;
        return true;
    } else {
        return false;
    }
}

На аппаратном уровне реализуется через:

  • Инструкции типа CMPXCHG (x86), LDREX/STREX (ARM)

  • CPU-поддержку атомарных операций и Memory barrier

Используется для:

⚙️ Где применяется

ОбластьНазначение
Multicore CPUБезопасный доступ к общей памяти
RTOSРеализация fast-path без блокировок
KernelУправление состоянием процессов, TCB
User-space libraryРеализация Mutex, Semaphore, Queue

✅ Преимущества

  • Не требует блокировок

  • Высокая производительность при низком конфликте

  • Основа для lock-free и wait-free алгоритмов

❌ Недостатки

  • Требует циклического повторения при неудаче

  • ABA problem — значение может измениться и вернуться

  • Поддержка ограничена архитектурой