Middle — Middle+
Kaip užtikrinti saugų darbą su Map kolekcija daugiagijų aplinkoje?
sobes.tech AI
Atsakymas iš AI
Go standartinė kortelė (map) nėra saugi vienu metu skaityti ir rašyti iš skirtingų gorutinių. Norint užtikrinti saugų darbą su kortele daugiagijų aplinkoje, galima naudoti šiuos požiūrius:
- Sinchronizacija naudojant mutex
Naudokite sync.Mutex arba sync.RWMutex kortelės prieigos apsaugai. Rašymo metu užrakinkite mutex rašymui, skaitymo metu — skaitymui (jei naudojate RWMutex).
import "sync"
type SafeMap struct {
mu sync.RWMutex
m map[string]int
}
func (s *SafeMap) Get(key string) (int, bool) {
s.mu.RLock()
defer s.mu.RUnlock()
val, ok := s.m[key]
return val, ok
}
func (s *SafeMap) Set(key string, val int) {
s.mu.Lock()
defer s.mu.Unlock()
s.m[key] = val
}
- Naudojant
sync.Map
Go turi specialią sync.Map struktūrą, optimizuotą konkurenciniam prieigai ir nereikalaujančią rankinio sinchronizavimo.
import "sync"
var m sync.Map
// Rašymas
m.Store("key", 42)
// Skaitymas
val, ok := m.Load("key")
- Naudojant kanalus (channels)
Prieiga prie kortelės gali būti organizuota per goroutine, kuri tvarko skaitymo ir rašymo užklausas per kanalus, užtikrinant seką.
Pasirinkimas priklauso nuo konkrečių našumo ir įgyvendinimo sudėtingumo reikalavimų.