Middle — Middle+
Արդյո՞ք անվտանգ է բազմատիրույթային միջավայրում առանց լրացուցիչ սինխրոնիզացիայի գրանցում կատարել map կոնտեյների մեջ։
sobes.tech AI
Պատասխան AI-ից
Go-ում ստանդարտ քարտը (map) անվտանգ չէ բազմաաթոռային գրանցման համար: Եթե մի քանի goroutine-ներ միաժամանակ գրում են map-ին առանց սինխրոնիզացիայի, դա կհանգեցնի մրցակցային պայմանների և աշխատանքի ժամանակ պանիկների:
Բազմամյա միջավայրում անվտանգ գրանցման համար անհրաժեշտ է օգտագործել՝
- sync.Mutex կամ sync.RWMutex մուտքի փակման համար;
- sync.Map՝ ստանդարտ գրադարանի բազմաաթոռային անվտանգ քարտի իրականացում:
Օրինակ sync.Mutex-ով՝
var mu sync.Mutex
var m = make(map[string]int)
func safeWrite(key string, value int) {
mu.Lock()
m[key] = value
mu.Unlock()
}
Այսպիսի սինխրոնիզացիայի բացակայության դեպքում, գրանցումը map-ում անվտանգ չէ։