Sobes.tech
Senior

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

sobes.tech AI

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

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

უსაფრთხოდ გამოყენებისთვის კონკურენტულ გარემოში, შეგიძლიათ:

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

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

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

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

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