📌 CAS
CAS (Compare-And-Swap) — атомарная операция, применяемая в многопоточных средах для синхронизации данных без использования Lock или Mutex. Используется в реализациях Spinlock, lock-free структур и протоколов.
🧠 Как работает
CAS принимает три аргумента:
- Адрес (memory location)
 - Ожидаемое значение
 - Новое значение
 
CAS сравнивает текущее значение по адресу с ожидаемым, и если они равны — заменяет его на новое. Всё происходит атомарно.
// Псевдокод
bool CAS(addr, expected, new) {
    if (*addr == expected) {
        *addr = new;
        return true;
    } else {
        return false;
    }
}На аппаратном уровне реализуется через:
- 
Инструкции типа
CMPXCHG(x86),LDREX/STREX(ARM) - 
CPU-поддержку атомарных операций и Memory barrier
 
Используется для:
- 
Lock-free очередей и стеков
 - 
Reference counting без блокировок
 
⚙️ Где применяется
| Область | Назначение | 
|---|---|
| Multicore CPU | Безопасный доступ к общей памяти | 
| RTOS | Реализация fast-path без блокировок | 
| Kernel | Управление состоянием процессов, TCB | 
| User-space library | Реализация Mutex, Semaphore, Queue | 
✅ Преимущества
- 
Не требует блокировок
 - 
Высокая производительность при низком конфликте
 - 
Основа для lock-free и wait-free алгоритмов
 
❌ Недостатки
- 
Требует циклического повторения при неудаче
 - 
ABA problem — значение может измениться и вернуться
 - 
Поддержка ограничена архитектурой