Go atomic包的使用

发布时间:2023-03-18浏览次数:0

支持注册ChatGPT Plus的OneKey虚拟卡
绑定Apple Pay、Google Pay、支付宝和微信支付进行日常消费

注册和了解更多 ->

silver

Go语言中的atomic包提供了一些原子操作,这些原子操作可以保证并发安全,即使有多个goroutine同时访问同一个变量,也不会发生数据竞争。

常用的原子操作有以下几种:

  1. AddInt32/64,用于对int32/64类型的值进行原子加法操作
  2. CompareAndSwapInt32/64,用于比较并交换int32/64类型的值
  3. SwapInt32/64,用于原子交换int32/64类型的值
  4. LoadInt32/64,用于原子加载int32/64类型的值
  5. StoreInt32/64,用于原子存储int32/64类型的值

下面是一个使用atomic包的示例代码:

package main

import (
	"fmt"
	"sync/atomic"
)

func main() {
	var count int32 = 0 // 定义一个计数器

	// 创建10个goroutine,每个goroutine会对计数器执行1000次原子加操作
	for i := 0; i < 10; i++ {
		go func() {
			for j := 0; j < 1000; j++ {
				atomic.AddInt32(&count, 1)
			}
		}()
	}

	// 等待所有goroutine执行完毕
	for i := 0; i < 10; i++ {
		<-done
	}

	// 输出最终的计数器值
	fmt.Println(count)
}

可以看到,通过使用atomic包提供的原子操作,可以保证对count变量的并发访问安全。

字节笔记本扫描二维码查看更多内容