本文已参与「新人创作礼」活动,一起开启掘金创作之路。
问题起因:我使用协程,函数内对
map读写
一、问题代码
//全局变量
var map map[string]string
assign := averageAssign(dataTree, 3)
var wg sync.WaitGroup
wg.Add(3)
for i, _ := range assign {
go handle(assign[i], i, &wg)
}
wg.Wait()
func handle(epsTree []model.Xx, i int, wg *sync.WaitGroup) {
defer wg.Done()
xx:=map[xx]
map[xx]=xx
}
二、修复
①声明结构体
type UMap struct {
sync.RWMutex Map map[string]string
}
var map *UMap
②声明map读写函数
//读
func (l *UMap) readMap(key string) (string, bool) {
l.RLock()
value, ok := l.Map[key]
l.RUnlock()
return value, ok
}
//写
func (l *UMap) writeMap(key string, value string) {
l.Lock()
l.Map[key] = value
l.Unlock()
}
③使用安全读写
....
//读
value, _ := map.readMap(key)
//写
map.writeMap(key, value)