Sobes.tech
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-ում անվտանգ չէ։