Junior — Middle
Ի՞նչ կլինի, եթե միաժամանակ մի քանի գորուտիներ փորձեն մուտք գործել նույն բանալիին քարտում։
sobes.tech AI
Պատասխան AI-ից
Go լեզվում, քարտեզը (map) չի հանդիսանում հոսքային անվտանգ տվյալների կառուցվածք: Եթե մի քանի գորուտիններ միաժամանակ փորձում են կարդալ և/կամ գրել նույն քարտեզում առանց սինխրոնիզացիայի, դա կհանգեցնի մրցակցային պայմանների և հնարավոր է՝ գործարկման ժամանակ Panic:
Դրա կանխարգելման համար անհրաժեշտ է օգտագործել սինխրոնիզացիայի մեխանիզմներ, օրինակ՝
sync.Mutex՝ քարտեզի մուտքի փակելու համար:sync.RWMutex՝ ընթերցման և գրելու համար փակողներ բաժանելու համար:- Մասնագիտացված կառուցվածքներ, օրինակ՝
sync.Map, որոնք անվտանգ են մրցակցային մուտքի համար:
Օրինակ՝ sync.Mutex օգտագործելով քարտեզը պաշտպանելու համար:
var mu sync.Mutex
var m = make(map[string]int)
func write(key string, value int) {
mu.Lock()
defer mu.Unlock()
m[key] = value
}
func read(key string) int {
mu.Lock()
defer mu.Unlock()
return m[key]
}