📌 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 — значение может измениться и вернуться
-
Поддержка ограничена архитектурой