Junior — Middle
Kā nodrošināt drošību, strādājot ar Map daudzprocesu vidē?
sobes.tech AI
Atbilde no AI
Go valodā standarta karte (map) nav droša vienlaicīgai lasīšanai un rakstīšanai no dažādām gorutīnām. Lai nodrošinātu drošību darbā ar kartēm daudzvītnēs vidēs, var izmantot:
- Aizslēgumus (sync.Mutex vai sync.RWMutex) — bloķē piekļuvi kartei lasīšanas/rakstīšanas laikā.
var (
m = make(map[string]int)
mu sync.RWMutex
)
func read(key string) int {
mu.RLock()
defer mu.RUnlock()
return m[key]
}
func write(key string, value int) {
mu.Lock()
defer mu.Unlock()
m[key] = value
}
- sync.Map — specializēta, droša daudzvītnu struktūra no standarta bibliotēkas, optimizēta lielam gorutīnu skaitam.
var m sync.Map
func write(key string, value int) {
m.Store(key, value)
}
func read(key string) (int, bool) {
val, ok := m.Load(key)
if !ok {
return 0, false
}
return val.(int), true
}
Izvēle ir atkarīga no konkrētās uzdevuma prasībām: ja nepieciešams daudz rakstīšanas un lasīšanas operāciju, labāk izmantot aizslēgumus; ja operācijas galvenokārt ir lasīšana, sync.Map var būt efektīvāka.