我加了锁,可还是报错。 fatal error: concurrent map iteration and map write
这是为何呢?百度的各种方法也都试了,都不行。
package main
import (
"fmt"
"sync"
)
func main() {
var counter = struct{
sync.RWMutex
m map[string]int
}{m: make(map[string]int)}
for i := 0; i < 2; i++ {
go func() {
for j := 0; j < 1000000; j++ {
counter.Lock()
counter.m["some_key"]++
counter.Unlock()
}
}()
}
fmt.Println(counter)
}
有疑问加站长微信联系(非本文作者)

你只顾着写的时候加锁,读也得加。
fmt.Println(counter)
你把它给忘了!楼上正解,读的地方加个读锁
RLock
即可所有崩溃都可以很容易在崩溃后打印的调用堆栈里面找到原因
谢谢~非常感谢。是我疏忽了。
非常感谢
这不是一种好方式。。。在golang里也有类似java里面的 ConcurrentHashMap 。
自己加锁非常耗性能。功能上可以实现。一旦高并发,会发生阻塞点。。
给你推荐个极品方案
https://github.com/orcaman/concurrent-map
@631768417 我正学到这里,就想试试为什么map不是并发安全的,最笨的就是加锁,所以试试,结果还报错了。谢谢您
@631768417 我正学到这里,就想试试为什么map不是并发安全的,最笨的就是加锁,所以试试,结果还报错了。谢谢您