Junior — Middle
Ar saugu naudoti bendrus išteklius, tokius kaip Map, kai jais naudojasi keli goroutine'ai vienu metu?
sobes.tech AI
Atsakymas iš AI
Ne, standartinė Go žemėlapis (map) nėra srautui saugi ir negali būti naudojama vienu metu kelių gorutinių be papildomos sinchronizacijos. Be apsaugos gali įvykti duomenų lenktynės ir panika.
Saugiai naudoti bendrus išteklius, tokius kaip žemėlapiai, daugiagručių aplinkoje, galima:
- Naudojant sync.Mutex arba sync.RWMutex žemėlapio apsaugai.
- Naudojant sync.Map, specializuotą ir srautui saugią duomenų struktūrą žemėlapiams.
Pavyzdys su 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]
}
Naudojant sync.Map:
var m sync.Map
m.Store("key", 42)
value, ok := m.Load("key")