Intern
Vai ir droši lasīt kartes Go?
sobes.tech AI
Atbilde no AI
Go valodā lasīšana no map nav droša pavedieniem, ja vienlaikus notiek rakstīšana. Lai droši lasītu daudzpavedienu vidē, ir jāizmanto sinhronizācija, piemēram, sync.RWMutex bloķējot lasīšanai un rakstīšanai, vai jāizmanto sync.Map, kas ir īpaši izstrādāts konkurējošai piekļuvei.
Piemērs ar sync.RWMutex:
import (
"sync"
)
var (
m = make(map[string]int)
mu sync.RWMutex
)
func read(key string) (int, bool) {
mu.RLock() // lasīšanas bloķēšana
defer mu.RUnlock() // bloķēšanas atbrīvošana
val, ok := m[key]
return val, ok
}
func write(key string, val int) {
mu.Lock() // rakstīšanas bloķēšana
defer mu.Unlock() // bloķēšanas atbrīvošana
m[key] = val
}
Vai izmantojiet sync.Map:
import "sync"
var m sync.Map
func read(key string) (interface{}, bool) {
return m.Load(key)
}
func write(key string, val interface{}) {
m.Store(key, val)
}
sync.Map ir noderīgs, kad ir daudz konkurējošu operāciju, bet tam ir īpašības, kas saistītas ar veiktspēju un API.