Junior — Middle
Biztosítható-e a biztonság több szálból történő egyidejű Map-be írás esetén?
sobes.tech MI
Válasz az MI-től
Go-ban az alapértelmezett térkép (map) nem szálbiztos az egyidejű írásokhoz több goroutine-tól. Ha több goroutine ír egyidejűleg egy map-be szinkronizáció nélkül, akkor pánik lép fel.
Az egyidejű írás biztonságának biztosításához:
- Használjon mutexet (sync.Mutex vagy sync.RWMutex) a map hozzáférésének védelmére.
- Használjon speciális, szálbiztos adatstruktúrákat, például a sync.Map-ot, amely a konkurens hozzáférésre van tervezve.
Példa mutex-szel:
var mu sync.Mutex
var m = make(map[string]int)
func safeWrite(key string, value int) {
mu.Lock()
defer mu.Unlock()
m[key] = value
}
Vagy a sync.Map használatával:
var m sync.Map
func safeWrite(key string, value int) {
m.Store(key, value)
}
Így az egyidejű írások biztonsága érdekében szinkronizációt kell alkalmazni.