Junior — Middle
რა შედეგები შეიძლება გამოიწვიოს ერთდროულად Map-ში სხვადასხვა კონკურენტული gorutin-ებიდან ჩაწერით?
sobes.tech AI
პასუხი AI-სგან
Go-да стандартული რუკა (map) უსაფრთხო არაა ერთდროულად წაკითხვასა და დაწერაზე რამდენიმე გორუტინიდან. თუ რამდენიმე გორუტინი ერთდროულად ცდილობს ერთსა და იმავე რუკაში დაწერას სინქრონიზაციის გარეშე, ეს გამოიწვევს მონაცემთა შეჯახებას, runtime-ის პანიკას (фатალური შეცდომა: ერთდროულად დაწერილი რუკაზე) და პროგრამის არაპროგნოზირებად ქცევას.
პრობლემების თავიდან ასაცილებლად, საჭიროა:
- 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()
}
ამგვარი დაცვა გარეშე, პროგრამა შეიძლება მოულოდნელად შეწყდეს.