面试题答案
一键面试1. atomic.AddInt64 保证数据一致性的原理
atomic.AddInt64
函数通过底层硬件提供的原子操作指令来保证数据一致性。在多核处理器环境下,这些原子操作指令能够确保在对共享变量进行操作时,不会受到其他处理器核心同时操作的干扰,从而避免数据竞争问题。它在硬件层面保证了操作的原子性,即要么操作全部完成,要么操作没有发生,不会出现部分操作完成的中间状态。
2. 代码示例
package main
import (
"fmt"
"sync"
"sync/atomic"
)
func main() {
var num int64
var wg sync.WaitGroup
const numRoutines = 10
for i := 0; i < numRoutines; i++ {
wg.Add(1)
go func() {
defer wg.Done()
for j := 0; j < 1000; j++ {
atomic.AddInt64(&num, 1)
}
}()
}
wg.Wait()
fmt.Println("Final value of num:", num)
}
在上述代码中,定义了一个 int64
类型的共享变量 num
。通过启动 numRoutines
个协程,每个协程对 num
进行 1000 次累加操作。atomic.AddInt64
函数确保了在多协程并发操作 num
时数据的一致性,最终输出的 num
值为正确的累加结果。