为了解决标准 map 配合读写锁 sync.RWMutex 在高并发读多写少场景下的锁竞争瓶颈,Go 标准库引入了 sync.Map。其核心机制依赖两张表:只读且无需加锁的 read 字典,以及持有互斥锁的 dirty 字典。
一、readOnly 结构定义与原子加载
go
type readOnly struct {
m map[any]*entry
amended bool // 若 dirty 包含 read 中缺失的 key,则为 true
}
type entry struct {
// p == nil 表示已被删除;p == expunged 表示已转移至 dirty 阶段
p unsafe.Pointer
}