Junior — Middle
Πώς συμπεριφέρεται το πρόγραμμα αν πραγματοποιείται ταυτόχρονη ανάγνωση τιμών από το map;
sobes.tech AI
Απάντηση από AI
Στα Go, η ταυτόχρονη ασφαλής ανάγνωση από έναν χάρτη δεν προκαλεί πανικό ή σφάλματα. Τα προβλήματα προκύπτουν αν πραγματοποιούνται ταυτόχρονα εγγραφές ή ανάγνωση και εγγραφή. Αν μόνο μερικές goroutines διαβάζουν τιμές από τον χάρτη χωρίς να τις αλλάζουν, αυτό είναι ασφαλές. Αλλά αν τουλάχιστον μια goroutine αλλάζει τον χάρτη, είναι απαραίτητη η χρήση μηχανισμών συγχρονισμού, όπως το sync.RWMutex ή το sync.Map.
Παράδειγμα ασφαλούς ανάγνωσης με χρήση του sync.RWMutex:
var m = make(map[string]int)
var mu sync.RWMutex
func read(key string) int {
mu.RLock()
defer mu.RUnlock()
return m[key]
}
func write(key string, value int) {
mu.Lock()
defer mu.Unlock()
m[key] = value
}
Έτσι, η ταυτόχρονη ανάγνωση χωρίς εγγραφή είναι ασφαλής, αλλά όταν υπάρχει εγγραφή, απαιτείται συγχρονισμός.