Senior
Ar galima vienu metu rašyti į tą pačią žemėlapį iš skirtingų gorutinų? Kas nutiks?
sobes.tech AI
Atsakymas iš AI
Go kalboje nėra saugu rašyti tą pačią žemėlapį iš skirtingų gorutinių vienu metu be papildomos sinchronizacijos. Standartinis žemėlapis nėra srauto saugus, ir vienu metu atliekamos rašymo operacijos gali sukelti paniką (runtime panic) arba duomenų sugadinimą.
Norint saugiai naudoti žemėlapį konkurencinėje aplinkoje, galima:
- Naudoti sync.Mutex arba sync.RWMutex žemėlapio prieigos apsaugai.
- Naudoti sync.Map, specializuotą ir srauto saugią duomenų struktūrą žemėlapiams.
Pavyzdys su mutex:
var (
m = make(map[string]int)
mu sync.Mutex
)
func write(key string, value int) {
mu.Lock()
m[key] = value
mu.Unlock()
}
Be tokios apsaugos, programa gali netikėtai sustoti.