Sobes.tech
Junior — Middle

Biztosítható-e a biztonság több szálból történő egyidejű Map-be írás esetén?

sobes.tech MI

Válasz az MI-től

Go-ban az alapértelmezett térkép (map) nem szálbiztos az egyidejű írásokhoz több goroutine-tól. Ha több goroutine ír egyidejűleg egy map-be szinkronizáció nélkül, akkor pánik lép fel.

Az egyidejű írás biztonságának biztosításához:

  • Használjon mutexet (sync.Mutex vagy sync.RWMutex) a map hozzáférésének védelmére.
  • Használjon speciális, szálbiztos adatstruktúrákat, például a sync.Map-ot, amely a konkurens hozzáférésre van tervezve.

Példa mutex-szel:

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

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

Vagy a sync.Map használatával:

var m sync.Map

func safeWrite(key string, value int) {
    m.Store(key, value)
}

Így az egyidejű írások biztonsága érdekében szinkronizációt kell alkalmazni.