sync.Map delete问题

一下是源代码: // 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???

已邀请:

sheepbao - https://sheepbao.github.io 爱go,爱编程,领域网络开发,流媒体、分布式、网络加速

赞同来自: dncmn buscoop

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

要回复问题请先登录注册