Junior — Middle
Da li je sigurno koristiti zajedničke resurse poput Map kada im se pristupa istovremeno iz više gorutina?
sobes.tech АИ
Одговор од АИ
Не, стандартна карта (map) у Go није безбедна за рад у више тхредова и не може се користити истовремено из више горутиних без додатне синхронизације. Без заштите може доћи до трка услова и панике.
Да бисте безбедно користили заједничке ресурсе типа мапа у мулти-тхред окружењу, можете:
- Користити sync.Mutex или sync.RWMutex за заштиту приступа мапи.
- Користити sync.Map, специјализовану и безбедну за тхредове структуру података за мапе.
Пример са mutex-ом:
var mu sync.Mutex
var m = make(map[string]int)
func write(key string, value int) {
mu.Lock()
m[key] = value
mu.Unlock()
}
func read(key string) int {
mu.Lock()
defer mu.Unlock()
return m[key]
}
Користите sync.Map:
var m sync.Map
m.Store("key", 42)
value, ok := m.Load("key")