Junior — Middle
Може ли обезбедити безбедност при истовременом запису у Map из више потока?
sobes.tech АИ
Одговор од АИ
U Go-u, standardna mapa (map) nije sigurna za istovremeni zapis iz više gorutina. Ako više gorutina istovremeno zapisuje u mapu bez sinhronizacije, doći će do panike.
Da biste osigurali sigurnost pri istovremenom pisanju, možete:
- Koristiti mutex (sync.Mutex ili sync.RWMutex) za zaštitu pristupa mapi.
- Koristiti specijalizovane sigurnosne strukture podataka, poput sync.Map, koja je namenjena za konkurentan pristup.
Primer sa mutex-om:
var mu sync.Mutex
var m = make(map[string]int)
func safeWrite(key string, value int) {
mu.Lock()
defer mu.Unlock()
m[key] = value
}
Ili koristiti sync.Map:
var m sync.Map
func safeWrite(key string, value int) {
m.Store(key, value)
}
Na ovaj način, za sigurnost pri istovremenom pisanju, potrebno je koristiti sinhronizaciju.