Junior — Middle
Co się stanie, jeśli kilka goroutine jednocześnie spróbuje uzyskać dostęp do tego samego klucza w mapie?
sobes.tech AI
Odpowiedź od AI
W Go, mapa (mapa) nie jest strukturą danych bezpieczną dla operacji współbieżnych. Jeśli kilka gorutyn jednocześnie próbowało będzie czytać i/lub pisać do tego samego mapy bez synchronizacji, spowoduje to warunki wyścigu i prawdopodobnie panikę podczas działania.
Aby tego uniknąć, konieczne jest użycie mechanizmów synchronizacji, na przykład:
sync.Mutexdo blokowania dostępu do mapy.sync.RWMutexdo rozdzielenia blokad na odczyt i zapis.- Specjalistyczne struktury, takie jak
sync.Map, które są bezpieczne dla dostępu współbieżnego.
Przykład użycia sync.Mutex do ochrony mapy:
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]
}