2017-02-25 4 views
-2

So habe ich diese func ..gleichzeitige Karte Iteration und Kartenschreibfehler in Golang 1.8

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 
} 

Zeile 3 dieser func (für DMN, analysiert: = range store) me gleichzeitige Karte den Fehler Iteration geben und Karten Schreibfehler in Golang 1.8. irgendeine Idee?

Antwort

2

Es sieht wie Concurrent Map Misuse aus. Wahrscheinlich wurde Ihre Funktion von verschiedenen Goroteinen aufgerufen. Versuchen Sie, den Funktionskörper in mutex.Lock()/Unlock() einzuschließen, damit Ihre Karte für die gleichzeitige Verwendung sicher ist.

0

Es gibt eine verbesserte gleichzeitige Zugriff Prüfung in dem 1,8 Golang hinzugefügt, und dies ist der Quellcode in runtime/hashmap.go: 736,

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