type Map struct {
mu Mutex // dirty 和 misses 的互斥锁
read atomic.Pointer[readOnly] // 无锁,通过 CAS(一种原子操作)来访问
dirty map[any]*entry
// 记录 Load() 和 Delete() 在 readOnly.m 中未命中的次数
// 当 misses == len(dirty) 时
// readOnly.m = dirty
// dirty = nil
misses int
}
type readOnly struct {
m map[any]*entry
amended bool // 当 dirty 包含 readOnly.m 中没有的 key 时为 true
}
type entry struct {
// p == &value
// p == nil(已被逻辑删除):key 仍在 readOnly.m 和 dirty 中
// p == expunged(已被物理删除):key 仍在 readOnly.m 中(dirty 为 nil 后,新增 key-entry 触发,readOnly.m 将 entry.p != nil 的 key-entry 拷贝给 dirty 后,p == nil -> p == expunged
// 当调用 Store() 时,
// key 对应的 entry.p == nil:只需修改 readOnly.m 中的 entry.p
// key 对应的 entry.p == expunged:不仅要修改 readOnly.m 中的 entry.p,还要在 dirty 中新增该 key-entry
p atomic.Pointer[any]
}