Golang 1.8中的并发映射迭代和映射写入错误

时间:2017-02-25 07:52:12

标签: go

所以我有这个功能..

func Set(firstSet map[string][]App, store map[string]*Parsed) map[string][string]struct{} {
    s := make(map[string]map[string]struct{})
    for dmn, parsed := range store {
        for cId, apps := range firstSet {
            if _, ok := s[dmn]; !ok {
                s[dmn] = make(map[string]struct{})
            }
            s[dmn][cId] = struct{}{}
        }
    }

    return s
}

该func的第3行(对于dmn,已解析:=范围存储)在Golang 1.8中给出了错误并发映射迭代和映射写入错误。任何想法?

2 个答案:

答案 0 :(得分:2)

看起来像Concurrent Map Misuse 。可能你的功能是从不同的gorotines调用的。尝试将函数体包含在mutex.Lock()/ Unlock()中,以便您的映射对于并发使用是安全的。

答案 1 :(得分:0)

Golang 1.8中添加了增强的并发访问检查,这是runtime / hashmap.go中的源代码:736,

if h.flags&hashWriting != 0 {
    throw("concurrent map iteration and map write")
}