Junior — Middle
Jak zapewnić bezpieczny dostęp do karty w środowisku wielowątkowym?
sobes.tech AI
Odpowiedź od AI
W Go, aby bezpiecznie uzyskać dostęp do mapy (map) w środowisku wielowątkowym, konieczne jest użycie synchronizacji, ponieważ map nie jest strukturą danych bezpieczną dla wątków. Najczęstszym sposobem jest użycie mutexa (sync.Mutex lub sync.RWMutex) do blokowania dostępu podczas odczytu i zapisu.
Przykład z użyciem sync.RWMutex:
import (
"sync"
)
var (
m = make(map[string]int)
mu sync.RWMutex
)
func read(key string) int {
mu.RLock() // blokuje do odczytu
defer mu.RUnlock()
return m[key]
}
func write(key string, value int) {
mu.Lock() // blokuje do zapisu
defer mu.Unlock()
m[key] = value
}
W Go dostępny jest również typ sync.Map, który implementuje bezpieczną dla wątków mapę z optymalizacjami dla częstych operacji odczytu. Można go używać, jeśli nie potrzebujesz ścisłej typizacji i chcesz prostoty:
import "sync"
var m sync.Map
m.Store("key", 42) // zapis
value, ok := m.Load("key") // odczyt
W ten sposób, aby bezpiecznie uzyskać dostęp do mapy w środowisku wielowątkowym, używaj mutexów lub sync.Map.