map写入源代码写冲突
在 map 写入的时候,源代码有段如下
if h.flags&hashWriting != 0 {
throw("concurrent map writes")
}
hash := t.hasher(key, uintptr(h.hash0))
h.flags ^= hashWriting
上面的作用应该是避免写冲突,但是我看着如果两个 goroutine 一起进来,h.flags&hashWriting 并不会把它们拦住,前后脚进入 h.flags ^= hashWriting,最终 h.flags 的 hashWriting 位变成 0 了,也达不到避免写冲突的效果,这么理解是哪里不对?
推荐文章: