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")