Функция 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