Junior — Middle
Jak zachowuje się program, jeśli jednocześnie odbywa się konkurencyjne odczytywanie wartości z mapy?
sobes.tech AI
Odpowiedź od AI
W Go bezpieczne jednoczesne odczyty z mapy nie powodują paniki ani błędów. Problemy pojawiają się, gdy jednocześnie dochodzi do zapisu lub odczytu i zapisu. Jeśli w programie tylko kilka gorutyn odczytuje wartości z mapy bez ich modyfikacji, jest to bezpieczne. Jednak jeśli choć jedna gorutyna modyfikuje mapę, konieczne jest użycie mechanizmów synchronizacji, takich jak sync.RWMutex lub sync.Map.
Przykład bezpiecznego odczytu z użyciem sync.RWMutex:
var m = make(map[string]int)
var mu sync.RWMutex
func read(key string) int {
mu.RLock()
defer mu.RUnlock()
return m[key]
}
func write(key string, value int) {
mu.Lock()
defer mu.Unlock()
m[key] = value
}
W ten sposób, jednoczesny odczyt bez zapisu jest bezpieczny, ale przy zapisie konieczna jest synchronizacja.