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),等等。