Sobes.tech
Junior — Middle

Hogyan viselkedik a program, ha egyidejűleg konkurens olvasás történik a map-ből?

sobes.tech MI

Válasz az MI-től

Go nyelvben a térkép egyidejű biztonságos olvasása nem okoz pánikot vagy hibát. A problémák akkor merülnek fel, ha egyszerre történik írás vagy olvasás és írás. Ha a programban csak néhány goroutine olvassa a térképet anélkül, hogy módosítaná, ez biztonságos. De ha legalább egy goroutine módosítja a térképet, szinkronizációs mechanizmusokat, például a sync.RWMutex vagy a sync.Map használata szükséges.

Biztonságos olvasási példa a sync.RWMutex használatával:

var m = make(map[string]int)
var mu sync.RWMutex

func read(key string) int {
    mu.RLock()
    defer mu.RUnlock()
    return m[key]
}

func write(key string, value int) {
    mu.Lock()
    defer mu.Unlock()
    m[key] = value
}

Így a párhuzamos olvasás írás nélkül biztonságos, de írás esetén szinkronizáció szükséges.