【记录一个问题】macos arm64 中,使用 golang 的 atomic.LoadUint32() 得到的值是 0
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!
在 macos arm64 下调试一个无锁算法的时候,总在莫名其妙的地方崩溃,后来发现是 atomic.LoadUint32() 的地方读到的值是 0.

- 1 使用
curItemLen := atomic.LoadUint32(nextItemPtr)加载一个值,指针是 4 字节对齐的。 - 2 curItemLen等于 0 是不符合预期的,对这种情况专门做了检查
- 3 检查不符合条件,主动引发panic,然后在调试器中查看
- 4 通过调试器发现,nextItemPtr 指向的值为 8
- 5 curItemLen 实际读出来为 0
为了便于测试,故意多读几次 curItemLen:

当故意加了一个循环后,问题解决。
这个问题实在是太诡异了。

浙公网安备 33010602011771号