在Go编程语言中, sync 包提供了一个名为 Mutex 的类型,用于互斥锁。然而,Go语言并没有直接提供类似 Gomutex 的原子无锁互斥体。相反,它通过 sync/atomic 包提供原子操作,用于对基本数据类型进行原子操作。
sync/atomic 包提供了一些函数,例如 AddInt32 、 AddInt64 、 CompareAndSwapInt32 、 CompareAndSwapInt64 等,允许在相应类型的变量上执行原子操作。
例如,要对一个 int32 类型的变量执行原子递增操作,可以使用 sync/atomic 包中的 AddInt32 函数,示例如下:
package main
import (
"fmt"
"sync/atomic"
)
func main() {
var counter int32
atomic.AddInt32(&counter, 1) // 原子递增
fmt.Println(counter) // 输出: 1
}
在上面的示例中,使用 AddInt32 函数对 counter 变量的值进行原子递增操作。 &counter 语法用于将 counter 变量的内存地址传递给原子操作。
通过利用 sync/atomic 包提供的原子操作,可以在Go程序中实现原子性和同步。