Sobes.tech
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.