sync.Map 怎么解决线程安全问题?看过源码吗?

题目来源:腾讯

答案:

  • sync.Map底层也是锁,进行了读写分离
  1. type Map struct {
  2. mu Mutex read atomic.Value // readOnly
  3. dirty map[interface{}]*entry
  4. misses int
  5. }
  • read包含对并发访问安全的map内容的部分(无论是否持有mu)。
  • Dirty包含map内容中需要保存mu的部分。
  • misses计算自从上次读取map更新后,需要锁定mu来确定key是否存在的加载次数。