Intern
Արդյոք անվտանգ է Go-ում քարտեզներ ընթերցել?
sobes.tech AI
Պատասխան AI-ից
Go լեզվում, map-ից ընթերցումը անվտանգ չէ հոսքերի համար, եթե միաժամանակ կատարվում է գրառում։ Բազմահոսքային միջավայրում անվտանգ ընթերցում կատարելու համար անհրաժեշտ է օգտագործել սինխրոնիզացիա, օրինակ՝ sync.RWMutex օգտագործելով ընթերցման և գրելու համար փակագծեր կամ օգտագործել sync.Map, որը հատուկ մշակված է մրցակցային մուտքի համար։
Օրինակ sync.RWMutex-ով՝
import (
"sync"
)
var (
m = make(map[string]int)
mu sync.RWMutex
)
func read(key string) (int, bool) {
mu.RLock() // ընթերցման փակագիծ
defer mu.RUnlock() // բացում
val, ok := m[key]
return val, ok
}
func write(key string, val int) {
mu.Lock() // գրելու փակագիծ
defer mu.Unlock() // բացում
m[key] = val
}
Կամ օգտագործեք 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-ը հարմար է, երբ շատ մրցակցային գործողություններ են, բայց ունի առանձնահատկություններ կատարողականի և API-ի տեսանկյունից։