Sobes.tech
Middle — Middle+

Biztonságosan lehet írni egy map konténerbe több szálas környezetben további szinkronizáció nélkül?

sobes.tech MI

Válasz az MI-től

Go-ban az alapértelmezett térkép (map) nem szálbiztos írásra. Ha több goroutine ír egyidejűleg egy map-be szinkronizálás nélkül, az versenyhelyzeteket és futás közbeni pánikokat okoz.

Biztonságos íráshoz több szálas környezetben a következőket kell használni:

  • sync.Mutex vagy sync.RWMutex a hozzáférés zárolására;
  • sync.Map, a standard könyvtárból származó szálbiztos térkép megvalósítás.

Példa sync.Mutex-szel:

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

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

Szükségtelen ilyen szinkronizáció nélkül írni a map-be, az nem biztonságos.