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.