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

Функция atomic.LoadInt64

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

Синтаксис

atomic.LoadInt64(addr *int64) int64

Пример

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

package main import ( "fmt" "sync/atomic" ) func main() { var counter int64 = 100 val := atomic.LoadInt64(&counter) fmt.Println(val) }

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

100

Пример

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

package main import ( "fmt" "sync" "sync/atomic" "time" ) func main() { var counter int64 = 0 var wg sync.WaitGroup wg.Add(1) go func() { defer wg.Done() for i := 0; i < 5; i++ { atomic.AddInt64(&counter, 10) time.Sleep(10 * time.Millisecond) } }() wg.Add(1) go func() { defer wg.Done() for i := 0; i < 5; i++ { val := atomic.LoadInt64(&counter) fmt.Printf("Current value: %d\n", val) time.Sleep(10 * time.Millisecond) } }() wg.Wait() }

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

"Current value: 10" "Current value: 20" "Current value: 30" "Current value: 40" "Current value: 50"

Пример

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

package main import ( "fmt" "sync/atomic" "time" ) func main() { var value int64 = 42 go func() { for i := 0; i < 3; i++ { atomic.AddInt64(&value, 5) time.Sleep(50 * time.Millisecond) } }() for i := 0; i < 3; i++ { current := atomic.LoadInt64(&value) fmt.Printf("Read: %d\n", current) time.Sleep(100 * time.Millisecond) } }

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

"Read: 42" "Read: 47" "Read: 52"

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

  • функцию atomic.StoreInt64,
    которая атомарно устанавливает новое значение для 64-битного целого числа
  • функцию atomic.AddInt64,
    которая атомарно прибавляет значение к 64-битному целому числу
  • функцию atomic.SwapInt64,
    которая атомарно заменяет значение и возвращает старое
  • функцию atomic.CompareAndSwapInt64,
    которая атомарно сравнивает и заменяет значение
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить