Junior — Middle
Mi történik, ha több goroutine egyszerre próbál hozzáférni ugyanahhoz a kulcshoz egy térképen?
sobes.tech MI
Válasz az MI-től
Go nyelvben a térkép (map) nem szálbiztos adatszerkezet. Ha több goroutine egyszerre próbál olvasni és/vagy írni ugyanarra a térképre szinkronizálás nélkül, akkor versenyhelyzetekhez és valószínűleg futás közbeni pánikhoz vezet.
Ennek elkerülése érdekében szinkronizációs mechanizmusokat kell használni, például:
sync.Mutexa térkép hozzáférésének zárolására.sync.RWMutexaz olvasási és írási zárolások elkülönítésére.- Speciális struktúrák, például a
sync.Map, amelyek biztonságosak a párhuzamos hozzáféréshez.
A sync.Mutex használatával védett térkép példája:
var mu sync.Mutex
var m = make(map[string]int)
func write(key string, value int) {
mu.Lock()
defer mu.Unlock()
m[key] = value
}
func read(key string) int {
mu.Lock()
defer mu.Unlock()
return m[key]
}