Junior — Middle
რა მოხდება, თუ ერთდროულად რამდენიმე გორუტინი ერთსა და იმავე გასაღებს მიაღწევს რუკაში?
sobes.tech AI
პასუხი AI-სგან
Go dilində, xəritə (map) çox iplikli təhlükəsiz məlumat quruluşu deyil. Əgər bir neçə goroutine eyni zamanda xəritəyə oxuma və/yaxud yazma cəhd edərsə, bu, yarış şəraitlərinə və ehtimal ki, işləmə zamanı panikaya səbəb olacaq.
Bunun qarşısını almaq üçün, sinxronizasiya mexanizmlərindən istifadə etmək lazımdır, məsələn:
sync.Mutexistifadə edərək xəritəyə girişin bloklanması.sync.RWMutexistifadə edərək oxuma və yazma kilidlərinin ayrılması.- Xüsusi strukturlar, məsələn,
sync.Map, ki, bu, çox iplikli giriş üçün təhlükəsizdir.
sync.Mutex istifadə edərək xəritəni qoruma nümunəsi:
var mu sync.Mutex
var m = make(map[string]int)
func write(key string, value int) {
mu.Lock()
defer mu.Unlock()
m[key] = value
}
func read(key string) int {
mu.Lock()
defer mu.Unlock()
return m[key]
}