go中map并发使用是不安全的,当你使用goroutine同时对一个map进行读写操作时,不确定会发生什么(由于读写执行顺序不确定造成的).针对这种情况,我们要添加读写锁对sync.RWMutex其进行同步.
var counter = struct{
sync.RWMutex
m map[string]int
}{m: make(map[string]int)}
从counter读取数据,使用读锁
counter.RLock()
n := counter.m["some_key"]
counter.RUnlock()
fmt.Println("some_key:", n)
向counter写数据,使用写锁
counter.Lock()
counter.m["some_key"]++
counter.Unlock()
参考: http://blog.golang.org/go-maps-in-action
本文介绍了Go语言中Map在并发场景下的使用问题及解决方案。当多个goroutine尝试同时读写同一个Map时,可能会导致不可预测的行为。为了避免此类问题,文章推荐使用sync.RWMutex来同步读写操作。

433

被折叠的 条评论
为什么被折叠?



