РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
885 of 1593 menu

Функция atomic.SwapUint64

Функция atomic.SwapUint64 атомарно устанавливает новое значение для переменной типа uint64 и возвращает ее предыдущее значение. Она принимает два параметра: указатель на переменную типа uint64 и новое значение типа uint64. Операция выполняется атомарно, что гарантирует безопасность при конкурентном доступе из нескольких горутин.

Синтаксис

atomic.SwapUint64(addr *uint64, new uint64) (old uint64)

Пример

Давайте выполним атомарную замену значения переменной:

package main import ( "fmt" "sync/atomic" ) func main() { var val uint64 = 100 old := atomic.SwapUint64(&val, 200) fmt.Println("Old value:", old) fmt.Println("New value:", val) }

Результат выполнения кода:

"Old value: 100" "New value: 200"

Пример

Давайте используем атомарную замену для реализации счетчика с одновременной заменой значения:

package main import ( "fmt" "sync" "sync/atomic" ) func main() { var counter uint64 = 0 var wg sync.WaitGroup for i := 0; i < 10; i++ { wg.Add(1) go func() { defer wg.Done() old := atomic.SwapUint64(&counter, counter+1) fmt.Println("Old counter:", old) }() } wg.Wait() fmt.Println("Final counter:", counter) }

Результат выполнения кода:

"Old counter: 0" "Old counter: 1" "Old counter: 2" "Old counter: 3" "Old counter: 4" "Old counter: 5" "Old counter: 6" "Old counter: 7" "Old counter: 8" "Old counter: 9" "Final counter: 10"

Пример

Давайте выполним атомарную замену с проверкой старого значения:

package main import ( "fmt" "sync/atomic" ) func main() { var val uint64 = 42 old := atomic.SwapUint64(&val, 100) if old == 42 { fmt.Println("Old value was 42, replaced with 100") } else { fmt.Println("Unexpected old value:", old) } fmt.Println("Current value:", val) }

Результат выполнения кода:

"Old value was 42, replaced with 100" "Current value: 100"

Смотрите также

  • функцию atomic.StoreUint64,
    которая атомарно сохраняет значение в переменную типа uint64
  • функцию atomic.LoadUint64,
    которая атомарно загружает значение типа uint64
  • функцию atomic.CompareAndSwapUint64,
    которая атомарно сравнивает и заменяет значение типа uint64
  • функцию atomic.AddUint64,
    которая атомарно прибавляет значение к переменной типа uint64
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить