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