Middle — Middle+
Biztonságosan lehet írni egy map konténerbe több szálas környezetben további szinkronizáció nélkül?
sobes.tech MI
Válasz az MI-től
Go-ban az alapértelmezett térkép (map) nem szálbiztos írásra. Ha több goroutine ír egyidejűleg egy map-be szinkronizálás nélkül, az versenyhelyzeteket és futás közbeni pánikokat okoz.
Biztonságos íráshoz több szálas környezetben a következőket kell használni:
- sync.Mutex vagy sync.RWMutex a hozzáférés zárolására;
- sync.Map, a standard könyvtárból származó szálbiztos térkép megvalósítás.
Példa sync.Mutex-szel:
var mu sync.Mutex
var m = make(map[string]int)
func safeWrite(key string, value int) {
mu.Lock()
m[key] = value
mu.Unlock()
}
Szükségtelen ilyen szinkronizáció nélkül írni a map-be, az nem biztonságos.