Senior
Μπορεί κανείς να γράψει σε ένα map από διαφορερα goroutines ταυτόχρονα; Τι θα συμβεί;
sobes.tech AI
Απάντηση από AI
Στη Go, δεν είναι ασφαλές να γράφεις σε ένα ίδιο map από διαφορετικές goroutines ταυτόχρονα χωρίς επιπλέον συγχρονισμό. Το πρότυπο map δεν είναι ασφαλές για πολλαπλά νήματα, και οι ταυτόχρονες λειτουργίες εγγραφής μπορεί να οδηγήσουν σε panic (runtime panic) ή σε καταστροφή δεδομένων.
Για να χρησιμοποιήσεις με ασφάλεια ένα map σε ένα ανταγωνιστικό περιβάλλον, μπορείς:
- Να χρησιμοποιήσεις sync.Mutex ή sync.RWMutex για να προστατεύσεις την πρόσβαση στο map.
- Να χρησιμοποιήσεις sync.Map, μια εξειδικευμένη και ασφαλή δομή δεδομένων για maps.
Παράδειγμα με mutex:
var (
m = make(map[string]int)
mu sync.Mutex
)
func write(key string, value int) {
mu.Lock()
m[key] = value
mu.Unlock()
}
Χωρίς αυτήν την προστασία, το πρόγραμμα μπορεί να τερματίσει απροσδόκητα.