Junior — Middle
Kā nodrošināt drošu piekļuvi kartei daudzprocesu vidē?
sobes.tech AI
Atbilde no AI
Go valodā, lai droši piekļūtu kartē (map) daudzšūnu vidē, ir nepieciešams izmantot sinhronizāciju, jo map nav šūnu droša datu struktūra. Visbiežāk izmantotais veids ir mutex (sync.Mutex vai sync.RWMutex), lai bloķētu piekļuvi lasīšanai un rakstīšanai.
Piemērs ar sync.RWMutex:
import (
"sync"
)
var (
m = make(map[string]int)
mu sync.RWMutex
)
func read(key string) int {
mu.RLock() // bloķēt lasīšanai
defer mu.RUnlock()
return m[key]
}
func write(key string, value int) {
mu.Lock() // bloķēt rakstīšanai
defer mu.Unlock()
m[key] = value
}
Tāpat Go ir sync.Map tips, kas realizē šūnu drošu karti ar optimizācijām biežām lasīšanas operācijām. To var izmantot, ja nav nepieciešama stingra tipu pārbaude un ir vēlme pēc vienkāršības:
import "sync"
var m sync.Map
m.Store("key", 42) // ieraksts
value, ok := m.Load("key") // lasīšana
Tādējādi, lai droši piekļūtu mapē daudzšūnu vidē, izmantojiet mutexus vai sync.Map.