Go 中 atomic Load 源码疑惑

Golang atomic Load 函数源码的实现疑惑?

标签:Go

地址:https://www.zhihu.com/question/348434761

详情描述

最近在研究 Golang 中 atomic 的源码实现,很疑惑的一点是 atomic 在 amd64 下的 Load 函数,Golang 中的 atomic 实际上拥有 SC 级别的内存模型,在 Store 中使用了 Lock XADDL 等指令,比较好理解,但是 Load 函数中仅仅是简单的返回了值,并没有加任何的内存屏障,那么 Load 是如何保障 SC 级别的呢?

runtime/internal/atomic/atomic_amd64x
//go:nosplit
//go:noinline
func Load(ptr *uint32) uint32 {
	return *ptr
}

我的问答

暂未解决,仍然欠缺一些能力。

相关阅读

Go 1.9 sync.Map揭秘

sync.Map 相比于传统的 map + 读写锁的方式,性能更好,是一种以空间换时间的方式。

Golang 1.3 sync.Atomic源码解析

Golang 中的原子操作主要依赖于原子操作,不同的 CPU 架构对应不同的 .s 汇编文件,比如 X86-64cpu 架构下的实现。