Я новичок в языке го.Когда я выполняю код, я получаю следующую ошибку:
фатальная ошибка: одновременное чтение карты и запись карты
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
}
кто-нибудь может сказать мне, почему?