Функция atomic.StoreInt64
Функция atomic.StoreInt64 из пакета sync/atomic
выполняет атомарную запись значения типа int64
в переменную, переданную по указателю. Это означает, что
операция записи будет выполнена как единое целое без
возможности прерывания, что критически важно при работе
с разделяемыми данными в конкурентной среде. Первым
параметром функция принимает указатель на переменную
типа int64, в которую производится запись,
вторым параметром — новое значение, которое
необходимо сохранить.
Синтаксис
atomic.StoreInt64(addr *int64, val int64)
Пример использования
В этом примере мы атомарно записываем значение в переменную
counter:
package main
import (
"fmt"
"sync/atomic"
)
func main() {
var counter int64
atomic.StoreInt64(&counter, 100)
fmt.Println(counter)
}
Результат выполнения кода:
100
Пример с конкурентным доступом
В этом примере несколько горутин одновременно записывают значения с помощью атомарной операции:
package 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))
}
Результат выполнения кода (конкретное значение может варьироваться):
4
Пример использования в структуре
Рассмотрим пример использования атомарной записи в поле структуры:
package 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))
}
Результат выполнения кода:
42
Смотрите также
-
функцию
atomic.LoadInt64,
которая атомарно читает значение типаint64 -
функцию
atomic.AddInt64,
которая атомарно прибавляет значение к переменной -
функцию
atomic.SwapInt64,
которая атомарно заменяет значение и возвращает старое -
функцию
atomic.CompareAndSwapInt64,
которая выполняет атомарное сравнение и замену значения