Sobes.tech
Junior — Middle

Μπορεί κανείς να χρησιμοποιεί με ασφάλεια κοινόχρηστους πόρους όπως το Map κατά την ταυτόχρονη πρόσβαση από πολλαπλές goroutines;

sobes.tech AI

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

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

Για ασφαλή χρήση κοινόχρηστων πόρων τύπου χάρτη σε περιβάλλον πολλαπλών νημάτων, μπορείτε:

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

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

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

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

func read(key string) int {
    mu.Lock()
    defer mu.Unlock()
    return m[key]
}

Χρήση του sync.Map:

var m sync.Map

m.Store("key", 42)
value, ok := m.Load("key")