💬 Что из себя представляет Compare and swap в Go?
Compare-and-swap (CAS) в Go — это атомарная операция, которая используется для достижения синхронизации. Она проверяет значение некоторой переменной и, если оно соответствует ожидаемому, заменяет его на новое значение. Важной особенностью CAS является то, что весь процесс выполнения — сравнение и замена — атомарен, то есть не может быть прерван или нарушен другими потоками или горутинами.
В Go для работы с атомарными операциями, включая CAS, используе
Эти функции принимают три аргумента: указатель на переменную, старое значение и новое значение. Функция сначала сравнивает текущее значение переменной со старым значением, и если они совпадают, заменяет его на новое значение. Возвращаемое значение — булево, указывающее, была ли произведена замена.
📌 Пример испо
В этом примере, если начальное значение переменной
Compare-and-swap (CAS) в Go — это атомарная операция, которая используется для достижения синхронизации. Она проверяет значение некоторой переменной и, если оно соответствует ожидаемому, заменяет его на новое значение. Важной особенностью CAS является то, что весь процесс выполнения — сравнение и замена — атомарен, то есть не может быть прерван или нарушен другими потоками или горутинами.
В Go для работы с атомарными операциями, включая CAS, используе
тся пакет s
ync/atomic. Примером CAS операции в Go является функция atomic.CompareAn
dSwapInt32 или atomic.CompareAn
dSwapInt64. Эти функции принимают три аргумента: указатель на переменную, старое значение и новое значение. Функция сначала сравнивает текущее значение переменной со старым значением, и если они совпадают, заменяет его на новое значение. Возвращаемое значение — булево, указывающее, была ли произведена замена.
📌 Пример испо
льзования atomic.CompareAn
dSwapInt32: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).