Sobes.tech
Junior — Middle

Este sigur să folosești resurse comune precum Map atunci când sunt accesate simultan din mai multe goroutines?

sobes.tech AI

Răspuns de la AI

Nu, harta standard în Go nu este sigură pentru utilizarea concurentă și nu poate fi utilizată simultan din mai multe goroutines fără sincronizare suplimentară. Accesul concurent fără protecție poate duce la condiții de cursă și panic.

Pentru utilizarea sigură a resurselor comune de tip hartă în medii multi-thread, se poate:

  • Folosi sync.Mutex sau sync.RWMutex pentru a proteja accesul la hartă.
  • Utiliza sync.Map, o structură de date specializată și sigură pentru hărți.

Exemplu cu 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]
}

Utilizarea sync.Map:

var m sync.Map

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