Junior — Middle
Millised tagajärjed tekivad, kui kirjutada samaaegselt Map-i erinevatest konkurentsivõimelistest gorutinidest?
sobes.tech AI
Vastus AI-lt
Standardselt kaard (map) Go keeles ei ole ohutu samaegses lugemise ja kirjutamise jaoks mitme goroutine'i poolt. Kui mitu goroutine'i üheaegselt proovivad kirjutada samasse kaardisse ilma sünkroniseerimiseta, põhjustab see võistlusolukordi, jooksuaegset paanikaga (surnud viga: samaaegsed kirjutised kaardile) ja programmi ettearvamatut käitumist.
Probleemide vältimiseks tuleb kasutada:
- Mutex'e (sync.Mutex), et kaitsta kaardi juurdepääsu.
- Spetsialiseeritud, samaaegset ohutut andmestruktuuri, näiteks sync.Map.
Näide mutex'iga:
var mu sync.Mutex
var m = make(map[string]int)
func write(key string, value int) {
mu.Lock()
m[key] = value
mu.Unlock()
}
Ilma sellise kaitseta võib programm ootamatult sulguda.