Sobes.tech
Junior — Middle

რა სიტუაციები შეიძლება წარმოიშვას ერთდროულად ჩანაწერის დროს რუკის ტიპის შენახვაში?

sobes.tech AI

პასუხი AI-სგან

Go ენის სტანდარტული რუკა (map) არ არის უსაფრთხო ერთდროულად წაკითხვასა და დაწერაზე რამდენიმე goroutine-დან. თუ რამდენიმე goroutine ერთდროულად წერს მონაცემებს რუკაში სინქრონიზაციის გარეშე, ეს შეიძლება გამოიწვიოს runtime-ის პანიკით შეტყობინებით "concurrent map writes" ან პროგრამის გაუთვალისწინებელი ქცევით.

ასეთი პრობლემების თავიდან ასაცილებლად, საჭიროა გამოიყენოთ სინქრონიზაციის მექანიზმები, მაგალითად mutex (sync.Mutex) ან სპეციალიზებული სტრუქტურები, როგორიცაა sync.Map, რომლებიც უსაფრთხო არიან კონკურენტული წვდომისთვის.

Mutex-ის მაგალითი:

var mu sync.Mutex
var m = make(map[string]int)

func writeToMap(key string, value int) {
    mu.Lock()
    defer mu.Unlock()
    m[key] = value
}

ამგვარი დაცვა არარსებობის შემთხვევაში, ერთდროულად დაწერა შეიძლება გამოიწვიოს მონაცემების დაზიანება ან პროგრამის მოულოდნელი დახურვა.