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

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