Golang atomic.AddUint32() 函数及示例

Golang atomic.AddUint32() 函数及示例

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

语法:

func AddUint32(addr *uint32, delta uint32) (new uint32)

在这里, addr 表示地址, delta 表示大于零的少量位数。而且,如果您想从 x 中减去一个有符号的正常数值 c,则可以通过 AddUint32( &x, ^uint32(c-1)) 来完成。如果您想特别地递减 x,则可以通过 AddUint32( &x, ^uint32(0)) 来完成。

注意: (*uint32) 是指向 uint32 值的指针。而 uint32 是大小为 32 位比特的无符号整数类型。而且,uint32 包含所有从 0 到 4294967295 的无符号 32 位整数的集合。

返回值: 它自动添加 addr 和 delta,并返回一个新值。

示例 1:

// Golang程序,演示
//AddUint32函数的用法
 
//包括主要包
包括主要
 
//导入fmt和sync/atomic
import (
    "fmt"
    "sync/atomic"
)
 
//主函数
func main() {
 
    //赋值给uint32
    var (
        i uint32 = 45
        j uint32 = 67
        k uint32 = 4294967295
        l uint32 = 0
        z int    = 5
    )
 
    //将常量值分配给uint32
    const (
        x uint32 = 6
        y uint32 = 3
    )
 
    //使用AddUint32方法
    //及其参数
    a_1 := atomic.AddUint32(&i, -uint32(z))
    a_2 := atomic.AddUint32(&j, ^(y - 1))
    a_3 := atomic.AddUint32(&k, x-1)
    a_4 := atomic.AddUint32(&l, ^uint32(z-1))
 
    //显示自动添加后的输出
    //地址和delta
    fmt.Println(a_1)
    fmt.Println(a_2)
    fmt.Println(a_3)
    fmt.Println(a_4)
}

输出:

40
64
4
4294967291

示例 2:

// Golang程序,演示
//AddUint32函数的用法
 
//包括主要包
包括主要
 
//导入fmt和sync/atomic
import (
    "fmt"
    "sync/atomic"
)
 
//定义uint32类型的addr
type addr uint32
 
//函数添加addr和delta
func (u *addr) add() uint32 {
 
    //调用AddUint32()函数
    //及其参数
    return atomic.AddUint32((*uint32)(u), 4)
}
 
//主函数
func main() {
 
    //定义u
    var u addr
 
    //循环增加u的值
    for i := 0; i < 17; i += 2{
    //显示添加delta和addr后的新值
    fmt.Println(u.add())
    }
} 

输出:

4
8
12
16
20
24
28
32
36

在上面的示例中,我们定义了一个函数 add ,它返回从调用 AddUint32 方法返回的输出。在主函数中,我们定义了一个“for”循环,每次调用都会增加 ‘u’ 的值。这里, AddUint32() 方法的第二个参数是固定的,只有第一个参数的值是可变的。然而,上一个调用的输出将是下一个调用中 AddUint32() 方法的第一个参数的值,直到循环停止。 让我们看看上面的示例如何工作:

1st parameter = 0,2nd parameter = 4 // 返回 (0 + 4 = 4)

// 现在,上面的输出是下一次调用 AddUint32() 方法的第一个参数
1st parameter = 4,2nd parameter = 4 // 返回 (4 + 4 = 8)
1st parameter = 8,2nd parameter = 4 // 返回 (8 + 4 = 12) 然后一直如此。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程