Junior — Middle
Kokios pasekmės kyla, kai vienu metu rašoma į Map iš skirtingų konkuruojančių gorutinų?
sobes.tech AI
Atsakymas iš AI
Go standarto žemėlapis (map) nėra saugus vienu metu skaityti ir rašyti iš kelių gorutinių. Jei keli gorutinai vienu metu bando rašyti į tą patį žemėlapį be sinchronizacijos, tai sukels lenktynių sąlygas, vykdymo metu paniką (fatali klaidą: vienu metu rašant į žemėlapį) ir nenuspėjimą programos elgesį.
Kad išvengtumėte problemų, turite naudoti:
- Mutex'us (sync.Mutex), kad apsaugotumėte prieigą prie žemėlapio.
- Specializuotas, saugias daugiaprocesines duomenų struktūras, pavyzdžiui, sync.Map.
Pavyzdys su mutex:
var mu sync.Mutex
var m = make(map[string]int)
func write(key string, value int) {
mu.Lock()
m[key] = value
mu.Unlock()
}
Be tokios apsaugos, programa gali netikėtai užstrigti.