Sobes.tech
Middle — Middle+

Ar saugu atlikti įrašą į map konteinerį daugiagijų aplinkoje be papildomos sinchronizacijos?

sobes.tech AI

Atsakymas iš AI

Go standartinė žemėlapis (map) nėra saugus rašymui keliuose gijų aplinkoje. Jei keli gorutinai rašo į žemėlapį vienu metu be sinchronizacijos, tai sukels lenktynių sąlygas ir paleidimo metu paniką.

Saugiam rašymui į žemėlapį kelių gijų aplinkoje reikia naudoti:

  • sync.Mutex arba sync.RWMutex prieigos užrakinimui;
  • sync.Map, standartinės bibliotekos saugių kelių žemėlapių įgyvendinimas.

Pavyzdys su sync.Mutex:

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

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

Be tokios sinchronizacijos rašymas į žemėlapį nėra saugus.