Go sync.Map 内部实现机制演示

双 Map 架构 (readOnly + dirty) | entry 指针三状态 | 无锁/加锁读写分离
1. readOnly (Read Map) 无锁 / 原子加载 (atomic.Load)
amended: false
Key entry 指针 (p) 指向的值 状态
暂无数据
2. dirty (Dirty Map) 互斥锁保护 (mu.Lock)
misses 计数: 0
提升阈值: 0 (len(dirty))
Key entry 指针 (共享同一 entry) 指向的值
dirty 为 nil (未创建)
执行轨迹与锁日志
初始化完成。准备开始模拟 sync.Map 操作。
核心数据结构定义 (Go Source)
type Map struct {
    mu Mutex
    read atomic.Pointer[readOnly] // 读写分离:只读 Map
    dirty map[any]*entry          // 保护 Map,包含新 key
    misses int                    // 未命中 read 的次数
}

type readOnly struct {
    m       map[any]*entry
    amended bool // 若 dirty 包含 read 没有的 key 则为 true
}

type entry struct {
    p atomic.Pointer[any] // 三状态: valid / nil / expunged
}