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了,也达不到避免写冲突的效果,这么理解是哪里不对?
推荐文章: