Middle — Middle+
Je bezpečné zapisovať do kontajnera map v prostredí s viacerými vláknami bez ďalšej synchronizácie?
sobes.tech AI
Odpoveď od AI
V Go štandardná mapa (map) nie je bezpečná pre zápis v prostredí s viacerými vláknami. Ak niekoľko gorútín súčasne zapisuje do mapy bez synchronizácie, dôjde k závodom a panike počas behu.
Pre bezpečný zápis do mapy v prostredí s viacerými vláknami je potrebné použiť:
- sync.Mutex alebo sync.RWMutex na uzamknutie prístupu;
- sync.Map, bezpečnú pre vlákna implementáciu mapy zo štandardnej knižnice.
Príklad s sync.Mutex:
var mu sync.Mutex
var m = make(map[string]int)
func safeWrite(kľúč string, hodnota int) {
mu.Lock()
m[kľúč] = hodnota
mu.Unlock()
}
Bez takejto synchronizácie nie je zápis do mapy bezpečný.