Senior
Lehet-e egyszerre több goroutine-ból írni egy map-be? Mi fog történni?
sobes.tech MI
Válasz az MI-től
Go nyelven nem biztonságos ugyanabba a map-be írni különböző goroutine-okból anélkül, hogy további szinkronizációt alkalmaznánk. Az alapértelmezett map nem szálbiztos, és a párhuzamos írási műveletek pánikot (runtime panic) vagy adatkárosodást okozhatnak.
Annak érdekében, hogy biztonságosan használjuk a map-et versengő környezetben, lehet:
- sync.Mutex vagy sync.RWMutex használata a hozzáférés védelmére.
- sync.Map használata, ami egy speciális, szálbiztos adatstruktúra map-ekhez.
Példa mutex-szel:
var (
m = make(map[string]int)
mu sync.Mutex
)
func write(key string, value int) {
mu.Lock()
m[key] = value
mu.Unlock()
}
Ennek a védelemnek a hiányában a program váratlanul leállhat.