Middle — Middle+
Kā nodrošināt drošu darbu ar Map kolekciju daudzprocesu vidē?
sobes.tech AI
Atbilde no AI
Standarta karte (map) Go valodā nav droša vienlaicīgai lasīšanai un rakstīšanai no dažādām gorutīnām. Lai nodrošinātu drošu darbu ar karti vairākšūnu vidē, var izmantot šādus pieejas:
- Sinhronizācija, izmantojot mutex
Izmantojiet sync.Mutex vai sync.RWMutex, lai aizsargātu piekļuvi kartei. Rakstīšanas laikā bloķējiet mutex rakstīšanai, lasīšanas laikā — lasīšanai (ja izmantojat 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
}
sync.Mapizmantošana
Go ir īpaša sync.Map struktūra, kas ir optimizēta konkurējošai piekļuvei un neprasa manuālu sinhronizāciju.
import "sync"
var m sync.Map
// Rakstīšana
m.Store("key", 42)
// Lasīšana
val, ok := m.Load("key")
- Kanālu (channels) izmantošana
Pieeju kartei var organizēt caur gorutīnu, kas apstrādā lasīšanas un rakstīšanas pieprasījumus caur kanāliem, nodrošinot secīgu piekļuvi.
Metodes izvēle ir atkarīga no konkrētajām veiktspējas prasībām un īstenošanas sarežģītības.