Golang atomic.AddInt32()函数及实例

Golang atomic.AddInt32()函数及实例

在Go语言中, atomic 包提供了较低级别的原子内存,有助于实现同步算法。在Golang中, AddInt32() 函数用于原子性地将 delta 添加到 *addr 中。该函数在atomic包中定义。您需要导入“sync/atomic”包以使用这些函数。

语法:

  func AddInt32(addr *int32, delta int32) (new int32)

这里, addr 表示地址,而 delta 表示一个值大于零的小位数。

注意: (*int32)是指int32值的指针。此外,int32包含从-2147483648到2147483647的所有有符号32位整数的集合。

返回值: 它原子性地将addr和delta相加,并返回一个新值。

示例1:

// Go程序说明使用 AddInt32 函数

// 包括主要包
package main

// 导入 fmt 和 sync/atomic
import (
  "fmt"
  "sync/atomic"
)

// 主要函数
func main() {

  // 为 int32 赋值
  var (
    i int32 = 97
    j int32 = 48
    k int32 = 34754567
    l int32 = -355363
  )

  // 为 int32 位常量赋值
  const (
    x int32 = 4
    y int32 = 2
  )

  // 调用 AddInt32 方法
  // 传入参数
  res_1 := atomic.AddInt32(&i, y)
  res_2 := atomic.AddInt32(&j, y-1)
  res_3 := atomic.AddInt32(&k, x-1)
  res_4 := atomic.AddInt32(&l, x)

  // 输出在原子性地添加 delta 和 addr 后的结果
  fmt.Println(res_1)
  fmt.Println(res_2)
  fmt.Println(res_3)
  fmt.Println(res_4)
} 

输出:

  99
  49
  34754570
  -355359

示例2:

// Go程序说明使用 AddInt32 函数

// 包括主要包
package main

// 导入 fmt 和 sync/atomic
import (
  "fmt"
  "sync/atomic"
)

// 定义类型为int32的addr
type addr int32

// add 函数将 delta 和 addr 相加
func (x *addr) add() int32 {

  // 调用 AddInt32() 函数
  // 传入参数
  return atomic.AddInt32((*int32)(x), 2)
}

// 主要函数
func main() {

  // 定义 x
  var x addr

  // for 循环将 x 的值增加
  for i := 1; i < 7; i++ {

    // 输出原子性地添加 delta 和 addr 后的新值
    fmt.Println(x.add())
  }
} 

输出:

  2
  4
  6
  8
  10
  12

在上面的示例中,我们定义了一个函数 add ,它返回调用 AddInt32 方法返回的输出。在主要函数中,我们定义了一个“for”循环,每次调用时将增加“x”的值。在这里,AddInt32()方法的第二个参数是常量,并且只有第一个参数的值是可变的。但是,上一次调用的输出将是AddInt32()方法下一个调用中第一个参数的值,直到循环停止。

让我们看看上面的示例是如何工作的:

  第一个参数=0,第二个参数=2 // 返回 (0 + 2 = 2)

  // 现在,上一个输出是下一次对 AddInt32() 方法的第一个参数的调用
  第一个参数=2,第二个参数=2 // 返回 (2 + 2 = 4)
  第一个参数=4,第二个参数=2 // 返回 (4 + 2 = 6),等等。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程