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

Функция atomic.AddUintptr

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

Синтаксис

atomic.AddUintptr(addr *uintptr, delta uintptr) uintptr

Пример

Давайте создадим переменную типа uintptr и выполним ее атомарное увеличение на 10:

package main import ( "fmt" "sync/atomic" ) func main() { var ptr uintptr = 100 newVal := atomic.AddUintptr(&ptr, 10) fmt.Printf("ptr: %d, newVal: %d\n", ptr, newVal) }

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

"ptr: 110, newVal: 110"

Пример

Используем атомарное сложение с отрицательным значением для уменьшения переменной:

package main import ( "fmt" "sync/atomic" ) func main() { var ptr uintptr = 50 newVal := atomic.AddUintptr(&ptr, ^uintptr(10 - 1)) fmt.Printf("ptr: %d, newVal: %d\n", ptr, newVal) }

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

"ptr: 40, newVal: 40"

Пример

Продемонстрируем атомарное сложение в конкурентной среде с использованием горутин:

package main import ( "fmt" "sync" "sync/atomic" ) func main() { var ptr uintptr = 0 var wg sync.WaitGroup for i := 0; i < 100; i++ { wg.Add(1) go func() { defer wg.Done() atomic.AddUintptr(&ptr, 1) }() } wg.Wait() fmt.Printf("ptr: %d\n", ptr) }

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

"ptr: 100"

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

  • функцию atomic.AddUint32,
    которая выполняет атомарное сложение для типа uint32
  • функцию atomic.AddUint64,
    которая выполняет атомарное сложение для типа uint64
  • функцию atomic.LoadUintptr,
    которая атомарно загружает значение типа uintptr
  • функцию atomic.StoreUintptr,
    которая атомарно сохраняет значение типа uintptr
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить