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

Тип atomic.Uint32

Тип atomic.Uint32 из пакета sync/atomic представляет собой атомарное беззнаковое 32-битное целое число. Он предоставляет методы для безопасного выполнения операций чтения, записи, сложения и сравнения с обменом без использования явных блокировок. Этот тип полезен для счетчиков, флагов и других числовых значений, к которым обращаются из нескольких горутин.

Синтаксис

var v atomic.Uint32 v.Store(100) value := v.Load() v.Add(10)

Пример

Давайте создадим счетчик с использованием atomic.Uint32 и инкрементируем его из нескольких горутин:

package main import ( "fmt" "sync" "sync/atomic" ) func main() { var counter atomic.Uint32 var wg sync.WaitGroup for i := 0; i < 1000; i++ { wg.Add(1) go func() { defer wg.Done() counter.Add(1) }() } wg.Wait() fmt.Println(counter.Load()) }

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

1000

Пример

Используем методы Store и Load для безопасной записи и чтения значения:

package main import ( "fmt" "sync/atomic" ) func main() { var val atomic.Uint32 val.Store(42) fmt.Println(val.Load()) val.Store(100) fmt.Println(val.Load()) }

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

42 100

Пример

Метод CompareAndSwap атомарно сравнивает значение с ожидаемым и заменяет его на новое, если они равны:

package main import ( "fmt" "sync/atomic" ) func main() { var val atomic.Uint32 val.Store(10) swapped := val.CompareAndSwap(10, 20) fmt.Println(swapped) fmt.Println(val.Load()) swapped = val.CompareAndSwap(10, 30) fmt.Println(swapped) fmt.Println(val.Load()) }

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

true 20 false 20

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

  • тип atomic.Uint64,
    который предоставляет атомарное беззнаковое 64-битное целое
  • тип atomic.Int32,
    который предоставляет атомарное знаковое 32-битное целое
  • функцию atomic.AddUint32,
    которая атомарно прибавляет значение к uint32
  • функцию atomic.LoadUint32,
    которая атомарно загружает значение типа uint32
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить