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

Функция atomic.StoreUint64

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

Синтаксис

atomic.StoreUint64(addr *uint64, val uint64)

Пример

Давайте запишем значение 100 в переменную с помощью атомарной операции:

package main import ( "fmt" "sync/atomic" ) func main() { var value uint64 = 42 atomic.StoreUint64(&value, 100) fmt.Println(value) }

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

100

Пример

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

package main import ( "fmt" "sync" "sync/atomic" "time" ) func main() { var value uint64 = 0 var wg sync.WaitGroup for i := 0; i < 5; i++ { wg.Add(1) go func() { defer wg.Done() atomic.StoreUint64(&value, 100) time.Sleep(time.Millisecond) }() } wg.Wait() fmt.Println(value) }

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

100

Пример

Давайте используем атомарную запись вместе с атомарной загрузкой для безопасного обмена данными между горутинами:

package main import ( "fmt" "sync" "sync/atomic" "time" ) func main() { var value uint64 = 0 var wg sync.WaitGroup wg.Add(1) go func() { defer wg.Done() time.Sleep(100 * time.Millisecond) atomic.StoreUint64(&value, 999) }() wg.Add(1) go func() { defer wg.Done() time.Sleep(50 * time.Millisecond) loaded := atomic.LoadUint64(&value) fmt.Printf("loaded: %d\n", loaded) }() wg.Wait() }

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

"loaded: 0"

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

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