Функция atomic.StoreInt64

Функция atomic.StoreInt64 из пакета sync/atomic выполняет атомарную запись значения типа int64 в переменную, переданную по указателю. Это означает, что операция записи будет выполнена как единое целое без возможности прерывания, что критически важно при работе с разделяемыми данными в конкурентной среде. Первым параметром функция принимает указатель на переменную типа int64, в которую производится запись, вторым параметром — новое значение, которое необходимо сохранить.

Синтаксис

goatomic.StoreInt64(addr *int64, val int64)

Пример использования

В этом примере мы атомарно записываем значение в переменную counter:

gopackage main

import (
  "fmt"
  "sync/atomic"
)

func main() {
  var counter int64

  atomic.StoreInt64(&counter, 100)

  fmt.Println(counter)
}

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

go100

Пример с конкурентным доступом

В этом примере несколько горутин одновременно записывают значения с помощью атомарной операции:

gopackage main

import (
  "fmt"
  "sync"
  "sync/atomic"
)

func main() {
  var value int64
  var wg sync.WaitGroup

  for i := 0; i < 5; i++ {
    wg.Add(1)
    go func(v int64) {
      defer wg.Done()
      atomic.StoreInt64(&value, v)
    }(int64(i))
  }

  wg.Wait()
  fmt.Println(atomic.LoadInt64(&value))
}

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

go4

Пример использования в структуре

Рассмотрим пример использования атомарной записи в поле структуры:

gopackage main

import (
  "fmt"
  "sync/atomic"
)

type Config struct {
  version int64
}

func main() {
  cfg := &Config{}

  atomic.StoreInt64(&cfg.version, 42)

  fmt.Println(atomic.LoadInt64(&cfg.version))
}

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

go42

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

  • функцию atomic.LoadInt64,
    которая атомарно читает значение типа int64
  • функцию atomic.AddInt64,
    которая атомарно прибавляет значение к переменной
  • функцию atomic.SwapInt64,
    которая атомарно заменяет значение и возвращает старое
  • функцию atomic.CompareAndSwapInt64,
    которая выполняет атомарное сравнение и замену значения