通过 read 字段修改 Map 也不会有并发问题吗?
来源:4-7 怎么解决map的并发问题?(一)

弦歌ty
2022-05-17
- 视频里说读写都是通过 read 字段进行操作的,但是源码里面说了这个字段是 readOnly,那是怎么修改的呢?
- 或者说 readOnly 的意思只是这个指针不修改,而指向的 map 内容可以修改?
- 如果一边读一边改不会有问题吗?
// readOnly is an immutable struct stored atomically in the Map.read field.
type readOnly struct {
m map[any]*entry
amended bool // true if the dirty map contains some key not in m.
}
写回答
1回答
-
Moody
2022-05-17
1.我理解应该是指向的map内容可以修改
2.操作具体的value时候用的是原子操作(atomic),可以避免并发问题,atomic原理可以在后面的章节看到
func (e *entry) tryStore(i *interface{}) bool { for { p := atomic.LoadPointer(&e.p) if p == expunged { return false } if atomic.CompareAndSwapPointer(&e.p, p, unsafe.Pointer(i)) { return true } }
212022-05-17
相似问题