新手问题 sync.Map delete问题

dncmn · 2018年08月07日 · 最后由 viewer 回复于 2018年08月24日 · 495 次阅读

一下是源代码: // Delete deletes the value for a key. func (m *Map) Delete(key interface{}) { read, _ := m.read.Load().(readOnly) e, ok := read.m[key] if ! ok && read.amended { m.mu.Lock() read, _ = m.read.Load().(readOnly) e, ok = read.m[key] if ! ok && read.amended { delete(m.dirty, key) } m.mu.Unlock() } if ok {// read 中存在的话,则标记为删除,疑问那 dirty 中不需要做判断吗???? e.delete() } }

上面是 sync.Map 中的 Delete 方法,如果删除的话,read 里面存在这个 key 的话,则是标记为删除, 如果 read 里面不存在,并且 dirty 中错在一些 read 中不存在的元素,直接从 dirty 中删除这个 key. 问题是: read 中存在这个 key,标记过删除之后,为什么没有去删除 dirty 中的这个 key???

更多原创文章干货分享,请关注公众号
  • 加微信实战群请加微信(注明:实战群):gocnio

额,第一眼看到这问题的排版,真是不想回答啊。。。markdown 了解一下。如果read map和dirty map同时存在该元素,将read map中的元素置为nil,等同于将dirty map的元素置为nil,因为read map和dirty map 使用的是同一个元素地址

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册