💬 Что из себя представляет Compare and swap в Go?



Compare-and-swap (CAS) в Go — это атомарная операция, которая используется для достижения синхронизации. Она проверяет значение некоторой переменной и, если оно соответствует ожидаемому, заменяет его на новое значение. Важной особенностью CAS является то, что весь процесс выполнения — сравнение и замена — атомарен, то есть не может быть прерван или нарушен другими потоками или горутинами.



В Go для работы с атомарными операциями, включая CAS, используется пакет sync/atomic. Примером CAS операции в Go является функция atomic.CompareAndSwapInt32 или atomic.CompareAndSwapInt64.



Эти функции принимают три аргумента: указатель на переменную, старое значение и новое значение. Функция сначала сравнивает текущее значение переменной со старым значением, и если они совпадают, заменяет его на новое значение. Возвращаемое значение — булево, указывающее, была ли произведена замена.



📌 Пример использования atomic.CompareAndSwapInt32:



var value int32 = 100

newValue := int32(200)

oldValue := int32(100)



swapped := atomic.CompareAndSwapInt32(&value, oldValue, newValue)

if swapped {

fmt.Println("Значение было заменено")

} else {

fmt.Println("Значение не было заменено")

}





В этом примере, если начальное значение переменной value равно oldValue (100), то оно будет атомарно заменено на newValue (200).