Junior — Middle
Milyen következményekkel jár, ha egyszerre írunk egy Map-be különböző versengő goroutine-okból?
sobes.tech MI
Válasz az MI-től
Go-ban az alapértelmezett térkép (map) nem biztonságos több goroutine egyidejű olvasására és írására. Ha több goroutine próbál ugyanabban az időben írni ugyanabba a térképbe szinkronizálás nélkül, az versenyhelyzetekhez, futás közbeni pánikhoz (fatális hiba: egyidejű térképírások) és kiszámíthatatlan programviselkedéshez vezet.
A problémák elkerülése érdekében:
- Mutexeket (sync.Mutex) kell használni a térképhez való hozzáférés védelmére.
- Speciális, szálbiztos adatstruktúrákat, például a sync.Map-ot alkalmazni.
Példa mutex-szel:
var mu sync.Mutex
var m = make(map[string]int)
func write(key string, value int) {
mu.Lock()
m[key] = value
mu.Unlock()
}
E nélkül a védelem nélkül a program váratlanul leállhat.