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()
}
ამგვარი დაცვა არ არსებობის შემთხვევაში, პროგრამა შეიძლება მოულოდნელად შეწყდეს.