找回密码
 立即注册
首页 业界区 业界 go学习笔记:atomic.AddInt32(&count, 1)中,count前为 ...

go学习笔记:atomic.AddInt32(&count, 1)中,count前为什么加&

全叶农 2025-7-31 16:44:54
原代码
  1. func AtomicCounterDemo() {
  2.         var count int32
  3.         var wg sync.WaitGroup
  4.         for i := 0; i < 10; i++ {
  5.                 wg.Add(1)
  6.                 go func() {
  7.                         defer wg.Done()
  8.                         for j := 0; j < 1000; j++ {
  9.                                 atomic.AddInt32(&count, 1)
  10.                         }
  11.                 }()
  12.         }
  13.         wg.Wait()
  14.         fmt.Println("最终计数器的值:", count)
  15. }
复制代码
在 Go 语言中,atomic.AddInt32 的函数签名如下:
  1. func AddInt32(addr *int32, delta int32) int32
复制代码
其中第一个参数 addr 是一个指向 int32 类型变量的指针,也就是 *int32。

为什么要加 &
  1. 1. count 是一个 int32 类型的变量。
  2. 2. &count 表示取 count 变量的内存地址,也就是 count 的指针。
  3. 3. 原子操作需要直接操作变量的内存地址,才能保证并发安全。
复制代码
举例:
  1. var count int32
  2. atomic.AddInt32(&count, 1) // 传入 count 的地址
复制代码
如果不加 &,直接写 atomic.AddInt32(count, 1),会报错,因为类型不匹配(需要指针,实际传了值)。

总结:

加 & 是为了传递变量的地址(指针),让原子操作函数能直接修改该变量的值,实现并发安全。


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册