Sobes.tech
Junior — Middle

Biztonságosan olvashatóak-e az adatok egy map adatstruktúrából anélkül, hogy hibák lépnének fel?

sobes.tech MI

Válasz az MI-től

Go-ban a térkép olvasása biztonságos, ha eközben senki sem módosítja azt. Azonban, ha párhuzamosan írnak (hozzáadás, törlés vagy elemek módosítása), az olvasás pánikhoz (futási hiba) vezethet.

A több szál közötti biztonságos olvasáshoz általában a következőket használják:

  • sync.RWMutex — a térkép írására zár, és lehetővé teszi a párhuzamos olvasást
  • sync.Map — egy speciális, szálbiztos adatstruktúra térképekhez

RWMutex példával:

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

func read(key string) (int, bool) {
    mu.RLock()
    defer mu.RUnlock()
    val, ok := m[key]
    return val, ok
}

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

Így a biztonságos olvasás elérhető, ha a szinkronizáció biztosított a írással.