Sobes.tech
Junior — Middle

Ce se întâmplă dacă mai multe goroutines încearcă să acceseze simultan aceeași cheie într-un map?

sobes.tech AI

Răspuns de la AI

În Go, un map (hartă) nu este o structură de date sigură pentru accesul concurent. Dacă mai multe goroutines încearcă să citească și/sau să scrie în același map fără sincronizare, acest lucru va duce la condiții de cursă și, cel mai probabil, la panic în timpul execuției.

Pentru a evita acest lucru, este necesar să se utilizeze mecanisme de sincronizare, de exemplu:

  • sync.Mutex pentru blocarea accesului la map.
  • sync.RWMutex pentru separarea blocurilor de citire și scriere.
  • Structuri specializate, cum ar fi sync.Map, care sunt sigure pentru accesul concurent.

Exemplu de utilizare a sync.Mutex pentru protejarea map:

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

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

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