1 回答
TA贡献1810条经验 获得超5个赞
对于这些场景,可用于通过获取您希望线程安全的代码周围的锁sync.Mutex来确保只允许进行一次修改。
var mu sync.Mutex
func readMap(key string) {
mu.Lock()
defer mu.Unlock()
return yourMap[key]
}
func updateMap(key, value string) {
mu.Lock()
defer mu.Unlock()
yourMap[key] = value
}
Mutex 确保只有一个goroutine 可以被允许访问锁定的代码,这意味着对于您的情况,只能执行一个操作,读取或写入。
为了提高效率,您应该考虑使用,sync.RWMutex因为您可能不想在读取地图时锁定地图。来自 GoDoc:
RWMutex 是读写器互斥锁。锁可以由任意数量的读取器或单个写入器持有。RWMutex 的零值是未锁定的互斥锁。
var mu sync.RWMutex
func readMap(key string) {
mu.RLock()
defer mu.RUnlock()
return yourMap[key]
}
func updateMap(key, value string) {
mu.Lock()
defer mu.Unlock()
yourMap[key] = value
}
- 1 回答
- 0 关注
- 155 浏览
添加回答
举报
