Go 并发访问地图
示例
进行中的映射并发并不安全。如果要同时访问它们,则必须加锁以对其进行读写。通常,最好的选择是使用,sync.RWMutex因为您可以拥有读写锁。但是,sync.Mutex也可以使用a。
type RWMap struct {
sync.RWMutex
m map[string]int
}
//Get是用于从基础映射中获取值的包装器
func (r RWMap) Get(key string) int {
r.RLock()
defer r.RUnlock()
return r.m[key]
}
//Set是用于设置基础映射中键的值的包装器
func (r RWMap) Set(key string, val int) {
r.Lock()
defer r.Unlock()
r.m[key] = val
}
//Inc增加键的RWMap中的值。
//这比r.Set(key,r.Get(key)++)更令人愉快
func (r RWMap) Inc(key string) {
r.Lock()
defer r.Unlock()
r.m[key]++
}
func main() {
//在里面
counter := RWMap{m: make(map[string]int)}
//获取读锁
counter.RLock()
_ = counter.["Key"]
counter.RUnlock()
//以上可以替换为
_ = counter.Get("Key")
//获取写锁
counter.Lock()
counter.m["some_key"]++
counter.Unlock()
//以上将需要写成
counter.Inc("some_key")
}包装函数的权衡是在基础图的公共访问与正确使用适当的锁之间。
热门推荐
10 儿子立冬祝福语简短独特
11 对当兵的祝福语简短
12 侄儿高考试祝福语简短
13 伴郎红包祝福语朋友简短
14 媳妇生日简短祝福语朋友
15 公司年会祝福语简短最好
16 元旦感恩祝福语简短大全
17 红包祝福语简短10字
18 周六早晨祝福语简短