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

Функция atomic.LoadUint64

Функция atomic.LoadUint64 из пакета sync/atomic предназначена для атомарного чтения значения переменной типа uint64. Атомарные операции гарантируют, что чтение будет выполнено корректно даже при конкурентном доступе из нескольких горутин. В качестве единственного параметра функция принимает указатель на переменную типа uint64. Возвращает она текущее значение этой переменной.

Синтаксис

atomic.LoadUint64(addr)

Пример

Давайте создадим атомарную переменную типа uint64 с начальным значением '42' и прочитаем её с помощью atomic.LoadUint64:

package main import ( "fmt" "sync/atomic" ) func main() { var value uint64 = 42 res := atomic.LoadUint64(&value) fmt.Println(res) }

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

42

Пример

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

package main import ( "fmt" "sync" "sync/atomic" "time" ) func main() { var counter uint64 = 0 var wg sync.WaitGroup wg.Add(1) go func() { defer wg.Done() for i := 0; i < 5; i++ { atomic.AddUint64(&counter, 1) time.Sleep(10 * time.Millisecond) } }() time.Sleep(25 * time.Millisecond) res := atomic.LoadUint64(&counter) fmt.Println("Counter value:", res) wg.Wait() res = atomic.LoadUint64(&counter) fmt.Println("Final counter:", res) }

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

"Counter value: 2" "Final counter: 5"

Пример

Давайте используем atomic.LoadUint64 в функции для проверки флага-индикатора, который управляет работой горутины:

package main import ( "fmt" "sync/atomic" "time" ) func main() { var running uint64 = 1 go func() { for atomic.LoadUint64(&running) == 1 { fmt.Println("Working...") time.Sleep(100 * time.Millisecond) } fmt.Println("Stopped") }() time.Sleep(250 * time.Millisecond) atomic.StoreUint64(&running, 0) time.Sleep(50 * time.Millisecond) }

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

"Working..." "Working..." "Working..." "Stopped"

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

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