Middle — Middle+
Kako osigurati sigurnu rad s kolekcijom Map u višestrukom okruženju?
sobes.tech АИ
Одговор од АИ
U Go, standardna mapa (map) nije sigurna za istovremeni pristup za čitanje i pisanje iz različitih gorutina. Da biste osigurali sigurnu rad sa mapom u višestrukom okruženju, možete koristiti sledeće pristupe:
- Sinhronizacija pomoću mutexa
Koristite sync.Mutex ili sync.RWMutex za zaštitu pristupa mapi. Pri pisanju zaključajte mutex za pisanje, a pri čitanju — za čitanje (ako koristite 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
}
- Korišćenje
sync.Map
U Go, postoji specijalna struktura sync.Map, koja je optimizovana za konkurentan pristup i ne zahteva ručno sinhronizovanje.
import "sync"
var m sync.Map
// Pisanje
m.Store("key", 42)
// Čitanje
val, ok := m.Load("key")
- Korišćenje kanala (channels)
Možete organizovati pristup mapi putem gorutine koja obrađuje zahteve za čitanje i pisanje putem kanala, obezbeđujući sekvencijalni pristup.
Izbor metode zavisi od specifičnih zahteva za performanse i složenost implementacije.