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

Функция atomic.AddInt64

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

Синтаксис

atomic.AddInt64(addr *int64, delta int64) int64

Пример

Давайте создадим счетчик, к которому будут одновременно обращаться несколько горутин. Каждая горутина увеличивает его на 1. Без атомарных операций результат был бы непредсказуемым из-за гонок данных. В этом примере мы используем atomic.AddInt64 для безопасного инкремента:

package main import ( "fmt" "sync" "sync/atomic" ) func main() { var counter int64 = 0 var wg sync.WaitGroup for i := 0; i < 1000; i++ { wg.Add(1) go func() { defer wg.Done() atomic.AddInt64(&counter, 1) }() } wg.Wait() fmt.Println(counter) }

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

1000

Пример

Функция возвращает новое значение после сложения, что позволяет сразу использовать результат. Давайте добавим к переменной 10 и сохраним результат:

package main import ( "fmt" "sync/atomic" ) func main() { var value int64 = 5 newValue := atomic.AddInt64(&value, 10) fmt.Println("New value:", newValue) }

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

"New value: 15"

Пример

Атомарная операция работает и для отрицательных значений. Давайте уменьшим переменную на 3 с помощью отрицательного дельты:

package main import ( "fmt" "sync/atomic" ) func main() { var value int64 = 100 newValue := atomic.AddInt64(&value, -3) fmt.Println("Decreased value:", newValue) }

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

"Decreased value: 97"

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

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