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