Функция atomic.AddUint64
Функция atomic.AddUint64 из пакета sync/atomic выполняет атомарное
прибавление указанного значения к переменной типа uint64 и возвращает
новое значение. Первым параметром функция принимает указатель на переменную
типа uint64, вторым параметром - значение типа uint64, которое
нужно прибавить.
Эта функция гарантирует, что операция сложения будет выполнена атомарно без использования блокировок. Она особенно полезна при работе с счетчиками и накопителями в конкурентных программах.
Синтаксис
atomic.AddUint64(addr *uint64, delta uint64) uint64
Пример
Давайте создадим переменную типа uint64 и атомарно прибавим к ней значение 42:
package main
import (
"fmt"
"sync/atomic"
)
func main() {
var counter uint64 = 10
newVal := atomic.AddUint64(&counter, 42)
fmt.Println(newVal)
}
Результат выполнения кода:
52
Пример
Давайте используем функцию для атомарного увеличения счетчика в нескольких горутинах:
package main
import (
"fmt"
"sync"
"sync/atomic"
)
func main() {
var counter uint64 = 0
var wg sync.WaitGroup
for i := 0; i < 1000; i++ {
wg.Add(1)
go func() {
defer wg.Done()
atomic.AddUint64(&counter, 1)
}()
}
wg.Wait()
fmt.Println(counter)
}
Результат выполнения кода:
1000
Пример
Давайте используем возвращаемое значение функции для проверки нового значения счетчика:
package main
import (
"fmt"
"sync/atomic"
)
func main() {
var counter uint64 = 5
newVal := atomic.AddUint64(&counter, 10)
if newVal > 10 {
fmt.Println("new value is greater than 10")
}
fmt.Println(newVal)
}
Результат выполнения кода:
"new value is greater than 10"
15
Смотрите также
-
функцию
atomic.AddInt32,
которая атомарно прибавляет значение к int32 -
функцию
atomic.AddInt64,
которая атомарно прибавляет значение к int64 -
функцию
atomic.LoadUint64,
которая атомарно загружает значение uint64 -
функцию
atomic.StoreUint64,
которая атомарно сохраняет значение uint64