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()
}
ასეთ სინქრონიზაციის გარეშე, რუკაში წერა უსაფრთხო არაა.