【发布时间】:2019-06-25 07:18:58
【问题描述】:
我是 Go 语言的新手。当我执行代码时,我得到以下错误:
致命错误:并发映射读取和映射写入
func foo() {
var m = map[string]int{"a": 1}
var lock = sync.RWMutex{}
go Read(m, lock)
time.Sleep(1 * time.Second)
go Write(m, lock)
time.Sleep(1 * time.Minute)
}
func main() {
foo()
}
func Read(m map[string]int, lock sync.RWMutex) {
for {
read(m, lock)
}
}
func Write(m map[string]int, lock sync.RWMutex) {
for {
write(m, lock)
}
}
func read(m map[string]int, lock sync.RWMutex) {
lock.RLock()
defer lock.RUnlock()
_ = m["a"]
}
func write(m map[string]int, lock sync.RWMutex) {
lock.Lock()
defer lock.Unlock()
m["b"] = 2
}
谁能告诉我为什么?
【问题讨论】:
标签: go