Junior — Middle
Este posibil să se citească în siguranță date dintr-o structură de date map fără riscul de apariție a erorilor?
sobes.tech AI
Răspuns de la AI
În Go, citirea dintr-un map este sigură dacă în acel moment nimeni nu îl modifică. Cu toate acestea, dacă se face o scriere în paralel (adăugare, ștergere sau modificare de elemente), citirea poate duce la panică (eroare de rulare).
Pentru a citi în siguranță dintr-un map într-un mediu multi-thread, se folosesc de obicei:
- sync.RWMutex — pentru a bloca map-ul pentru scriere și a permite citirea paralelă
- sync.Map — o structură de date specializată și sigură pentru map-uri
Exemplu cu RWMutex:
var (
m = make(map[string]int)
mu sync.RWMutex
)
func read(key string) (int, bool) {
mu.RLock()
defer mu.RUnlock()
val, ok := m[key]
return val, ok
}
func write(key string, val int) {
mu.Lock()
defer mu.Unlock()
m[key] = val
}
Astfel, citirea sigură este posibilă dacă se asigură sincronizarea cu scrierea.