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

Функция atomic.LoadUint32

Функция atomic.LoadUint32 атомарно загружает значение 32-битного беззнакового целого (uint32) из переданного указателя. Она гарантирует, что чтение будет выполнено как единая неделимая операция, что особенно важно при работе с данными, разделяемыми между несколькими горутинами. В качестве единственного параметра функция принимает указатель на переменную типа uint32, а возвращает её текущее значение.

Синтаксис

atomic.LoadUint32(addr *uint32) uint32

Пример

Давайте создадим переменную типа uint32 со значением 100 и атомарно прочитаем её с помощью atomic.LoadUint32:

package main import ( "fmt" "sync/atomic" ) func main() { var counter uint32 = 100 res := atomic.LoadUint32(&counter) fmt.Println(res) }

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

100

Пример

Рассмотрим более практический пример, где несколько горутин атомарно инкрементируют счётчик, а мы читаем его финальное значение:

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

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

1000

Пример

Если переменная не изменяется конкурентно, то можно использовать обычное чтение, но atomic.LoadUint32 всё равно обеспечивает гарантию видимости изменений между горутинами:

package main import ( "fmt" "sync/atomic" ) func main() { var value uint32 = 42 go func() { atomic.StoreUint32(&value, 100) }() // Гарантируем видимость изменения res := atomic.LoadUint32(&value) fmt.Println(res) }

Результат выполнения кода (может быть 42 или 100 в зависимости от времени выполнения горутины):

42

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

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