Junior — Middle
Šta će se desiti ako više gorutina istovremeno pokušaju da pristupe istoj ključe u mapi?
sobes.tech АИ
Одговор од АИ
У Go-у, карта (map) није безбедна структура података за рад у више нитова. Ако више горутина истовремено покушавају да читају и/или пишу у исту карту без синхронизације, то ће довести до такмичарских услова и вероватно панике током извршавања.
Да бисте то избегли, потребно је користити механизме за синхронизацију, на пример:
sync.Mutexза закључавање приступа карти.sync.RWMutexза раздвајање закључавања за читање и писање.- Специјализоване структуре, као што је
sync.Map, које су безбедне за конкурентни приступ.
Пример коришћења sync.Mutex за заштиту карте:
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]
}