Junior — Middle
Je možné zabezpečiť bezpečnosť pri súčasnom zápise do Map z viacerých vlákien?
sobes.tech AI
Odpoveď od AI
V Go, štandardná mapa (map) nie je bezpečná pre súčasný zápis z viacerých gorútín. Ak niekoľko gorútín súčasne zapisuje do mapy bez synchronizácie, dôjde k panike.
Na zabezpečenie bezpečnosti pri súčasnom zápise môžete:
- Použiť mutex (sync.Mutex alebo sync.RWMutex) na ochranu prístupu k mape.
- Použiť špecializované bezpečné dátové štruktúry, ako je napríklad sync.Map, ktorá je určená na konkurenčný prístup.
Príklad s mutexom:
var mu sync.Mutex
var m = make(map[string]int)
func safeWrite(key string, value int) {
mu.Lock()
defer mu.Unlock()
m[key] = value
}
Alebo použiť sync.Map:
var m sync.Map
func safeWrite(key string, value int) {
m.Store(key, value)
}
Takto je pri súčasnom zápise potrebné používať synchronizáciu.