Ответ
CAS (Compare-And-Swap) — это атомарная операция, используемая для безопасного изменения значения в многопоточной среде. Она сравнивает текущее значение переменной с ожидаемым и, если они совпадают, заменяет его на новое. Возвращает true, если замена прошла успешно.
Пример в Go с sync/atomic:
var value int64 = 42
newValue := int64(100)
swapped := atomic.CompareAndSwapInt64(&value, 42, newValue)
// swapped = true, value = 100
Ключевые особенности:
- Атомарность гарантируется на уровне процессора
- Избегает блокировок (lock-free)
- Может привести к livelock в случае высокой конкуренции
Используется в реализациях конкурентных структур данных (например, каналы в Go).