Junior — Middle
Μπορεί κανείς να χρησιμοποιεί με ασφάλεια κοινόχρηστους πόρους όπως το Map κατά την ταυτόχρονη πρόσβαση από πολλαπλές goroutines;
sobes.tech AI
Απάντηση από AI
Όχι, ο τυπικός χάρτης (map) στη Go δεν είναι ασφαλής για ταυτόχρονη πρόσβαση και δεν μπορεί να χρησιμοποιηθεί ταυτόχρονα από πολλαπρα goroutines χωρίς επιπλέον συγχρονισμό. Η πρόσβαση χωρίς προστασία μπορεί να προκαλέσει συνθήκες αγώνα και πανικούς.
Για ασφαλή χρήση κοινόχρηστων πόρων τύπου χάρτη σε περιβάλλον πολλαπλών νημάτων, μπορείτε:
- Να χρησιμοποιήσετε sync.Mutex ή sync.RWMutex για την προστασία της πρόσβασης στον χάρτη.
- Να χρησιμοποιήσετε sync.Map, μια εξειδικευμένη και ασφαλή δομή δεδομένων για χάρτες.
Παράδειγμα με mutex:
var mu sync.Mutex
var m = make(map[string]int)
func write(key string, value int) {
mu.Lock()
m[key] = value
mu.Unlock()
}
func read(key string) int {
mu.Lock()
defer mu.Unlock()
return m[key]
}
Χρήση του sync.Map:
var m sync.Map
m.Store("key", 42)
value, ok := m.Load("key")