Sobes.tech
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
}

Έτσι, η ταυτόχρονη ανάγνωση χωρίς εγγραφή είναι ασφαλής, αλλά όταν υπάρχει εγγραφή, απαιτείται συγχρονισμός.