Junior — Middle
Ποια είναι τα αποτελέσματα όταν γράφουμε ταυτόχρονα σε ένα Map από διαφορετικές ανταγωνιστικές goroutines;
sobes.tech AI
Απάντηση από AI
Στα Go, ο τυπικός χάρτης (map) δεν είναι ασφαλής για ταυτόχρονη ανάγνωση και εγγραφή από πολλαπλά goroutines. Αν πολλαπλά goroutines προσπαθήσουν να γράψουν ταυτόχρονα στον ίδιο χάρτη χωρίς συγχρονισμό, αυτό θα οδηγήσει σε συνθήκες αγώνα, panic κατά την εκτέλεση (fatal error: concurrent map writes) και απρόβλεπτη συμπεριφορά του προγράμματος.
Για να αποφύγετε προβλήματα, πρέπει να χρησιμοποιείτε:
- Μηχανισμούς κλειδώματος (sync.Mutex) για την προστασία της πρόσβασης στον χάρτη.
- Εξειδικευμένες δομές δεδομένων ασφαλείς για ταυτόχρονη πρόσβαση, όπως το 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()
}
Χωρίς αυτήν την προστασία, το πρόγραμμα μπορεί να τερματίσει απροσδόκητα.