Sobes.tech
Junior — Middle

Μπορείτε να διασφαλίσετε την ασφάλεια κατά την ταυτόχρονη εγγραφή σε Map από πολλαπλά νήματα;

sobes.tech AI

Απάντηση από AI

Στην Go, ο προεπιλεγμένος χάρτης (map) δεν είναι ασφαλής για ταυτόχρονη εγγραφή από πολλαπλά goroutines. Αν πολλαπλά goroutines γράφουν ταυτόχρονα σε έναν χάρτη χωρίς συγχρονισμό, θα προκληθεί panic.

Για να διασφαλίσετε την ασφάλεια κατά την ταυτόχρονη εγγραφή, μπορείτε:

  • Να χρησιμοποιήσετε ένα mutex (sync.Mutex ή sync.RWMutex) για την προστασία της πρόσβασης στον χάρτη.
  • Να χρησιμοποιήσετε εξειδικευμένες δομές δεδομένων ασφαλείς για ταυτόχρονη πρόσβαση, όπως το sync.Map, που προορίζεται για ανταγωνιστική πρόσβαση.

Παράδειγμα με mutex:

var mu sync.Mutex
var m = make(map[string]int)

func safeWrite(key string, value int) {
    mu.Lock()
    defer mu.Unlock()
    m[key] = value
}

Ή χρησιμοποιήστε το sync.Map:

var m sync.Map

func safeWrite(key string, value int) {
    m.Store(key, value)
}

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