Junior — Middle
Kas notiks, ja vairākas gorutīnas vienlaikus mēģinās piekļūt tai pašai atslēgai kartē?
sobes.tech AI
Atbilde no AI
Go valodā karte (map) nav šķēršļu droša datu struktūra. Ja vairāki gorutīnas vienlaikus mēģina lasīt un/vai rakstīt tajā pašā kartē bez sinhronizācijas, tas novedīs pie sacensību apstākļiem un, visticamāk, izpildes laikā notiks panika.
Lai to novērstu, ir nepieciešams izmantot sinhronizācijas mehānismus, piemēram:
sync.Mutexkartes piekļuves bloķēšanai.sync.RWMutexlasīšanas un rakstīšanas bloķu atdalīšanai.- Specializētas struktūras, piemēram,
sync.Map, kas ir drošas konkurējošai piekļuvei.
Piemērs, kā izmantot sync.Mutex kartes aizsardzībai:
var mu sync.Mutex
var m = make(map[string]int)
func write(key string, value int) {
mu.Lock()
defer mu.Unlock()
m[key] = value
}
func read(key string) int {
mu.Lock()
defer mu.Unlock()
return m[key]
}