Junior — Middle
Kas on ohutu kasutada jagatud ressursse nagu Map, kui neile pääseb ligi korraga mitu goroutine'i?
sobes.tech AI
Vastus AI-lt
Ei, Go standardkaart (map) ei ole niivõrd niiditõrge ja seda ei saa kasutada samaaegselt mitme goroutine'i poolt ilma täiendava sünkroniseerimiseta. Ilma kaitseta võib tekkida andmerikkumine ja pööre.
Turvalise ühiste ressursside, nagu kaartide, kasutamiseks mitmetuumses keskkonnas, saab:
- Kasutada sync.Mutex või sync.RWMutex, et kaitsta kaardi juurdepääsu.
- Kasutada sync.Map, mis on spetsialiseeritud ja niiditurvaline andmestruktuur kaartidele.
Näide mutex'iga:
var mu sync.Mutex
var m = make(map[string]int)
func write(key string, value int) {
mu.Lock()
m[key] = value
mu.Unlock()
}
func read(key string) int {
mu.Lock()
defer mu.Unlock()
return m[key]
}
Sync.Map kasutamine:
var m sync.Map
m.Store("key", 42)
value, ok := m.Load("key")