在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程序中实现原子性和同步。