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

Функция atomic.SwapInt32

Функция atomic.SwapInt32 выполняет атомарную замену значения переменной типа int32. В первый параметр мы передаем указатель на переменную, которую нужно изменить, во второй параметр мы передаем новое значение, которое нужно установить. Функция возвращает старое значение переменной до замены. Эта операция выполняется атомарно, что гарантирует безопасность при работе с общей памятью в конкурентных программах.

Синтаксис

atomic.SwapInt32(addr *int32, new int32) (old int32)

Пример

Давайте заменим значение переменной с 10 на 20 и получим старое значение:

package main import ( "fmt" "sync/atomic" ) func main() { var num int32 = 10 old := atomic.SwapInt32(&num, 20) fmt.Println("old value:", old) fmt.Println("new value:", num) }

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

"old value: 10" "new value: 20"

Пример

Атомарная замена особенно полезна при работе с несколькими горутинами. Давайте выполним замену значения из разных горутин:

package main import ( "fmt" "sync" "sync/atomic" ) func main() { var counter int32 = 0 var wg sync.WaitGroup for i := 1; i <= 5; i++ { wg.Add(1) go func(val int32) { defer wg.Done() old := atomic.SwapInt32(&counter, val) fmt.Printf("goroutine %d: old=%d, new=%d\n", val, old, counter) }(int32(i)) } wg.Wait() fmt.Println("final counter:", counter) }

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

"goroutine 5: old=0, new=5" "goroutine 3: old=5, new=3" "goroutine 4: old=3, new=4" "goroutine 1: old=4, new=1" "goroutine 2: old=1, new=2" "final counter: 2"

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

  • функцию atomic.SwapInt64,
    которая атомарно заменяет значение переменной типа int64
  • функцию atomic.SwapUint32,
    которая атомарно заменяет значение переменной типа uint32
  • функцию atomic.CompareAndSwapInt32,
    которая атомарно сравнивает и заменяет значение
  • функцию atomic.StoreInt32,
    которая атомарно сохраняет значение без возврата старого
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить