Junior — Middle
შესაძლებელია თუ არა უსაფრთხოების უზრუნველყოფა ერთდროულად რამდენიმე ნაკადიდან Map-ში ჩაწერისას?
sobes.tech AI
პასუხი AI-სგან
Go-ში სტანდარტული რუკა (map) არ არის უსაფრთხო ერთდროულად რამდენიმე goroutine-დან დაწერისთვის. თუ რამდენიმე goroutine ერთდროულად წერს map-ზე სინქრონიზაციის გარეშე, ეს გამოიწვევს პანიკას.
უსაფრთხოების უზრუნველსაყოფად ერთდროულად დაწერისას, შეგიძლიათ:
- გამოიყენოთ mutex (sync.Mutex ან sync.RWMutex) წვდომის დაცვისთვის map-ზე.
- გამოიყენოთ სპეციალიზებული, ერთდროულად უსაფრთხო მონაცემთა სტრუქტურები, როგორიცაა sync.Map, რომელიც განკუთვნილია კონკურენტული წვდომისთვის.
მაგალითი mutex-თან:
var mu sync.Mutex
var m = make(map[string]int)
func safeWrite(key string, value int) {
mu.Lock()
defer mu.Unlock()
m[key] = value
}
ან გამოიყენეთ sync.Map:
var m sync.Map
func safeWrite(key string, value int) {
m.Store(key, value)
}
ამგვარად, ერთდროულად დაწერის უსაფრთხოებისთვის საჭიროა სინქრონიზაცია.