底层实现
type Map struct {
mu Mutex
read atomic.Value // readOnly
dirty map[interface{}]*entry
misses int
}
- mu
mu是一个简单的互斥锁,底层为type Mutex struct { state int32 sema uint32 }
- read
read是一个原子操作,允许并发读。但是更新read数据时则需要加锁保护。实现底层为:
type Value struct {
v interface{}
}
type ifaceWords struct {
typ unsafe.Pointer
data unsafe.Pointer
}
在sync.Map中,read具体存储为:
type readOnly struct {
m map[interface{}]*entry
amended bool // true if the dirty map contains some key not in m.
}
也就是一个readonly
4. dirty
dirty是一个原始Map,线程不安全。存储写入的新Key以及read中没有删除的key。
5. misses
misses是一个整型变量,从read中读取数据时如果读取失败那么misses就会+1,当miss值增大到一定的值后,dirty就会成为一个read。
6. entry
entry是一个指针,指向value,其底层为:
type entry struct {
p unsafe.Pointer // *interface{}
}