Sobes.tech
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()
}

Անհրաժեշտ է, որ այս պաշտպանությունը կիրառվի, հակառակ դեպքում ծրագիրը կարող է անսպասելիորեն փակվել։