Junior — Middle
Xəritədən eyni zamanda rəqabətli oxuma baş verdikdə proqram necə davranır?
sobes.tech Süni İntellekt
AI-dan cavab
Go dilində, map-dən eyni vaxtda təhlükəsiz oxuma panik və ya səhvlərə səbəb olmur. Problemlər, eyni zamanda yazma və ya oxuma və yazma əməliyyatlarının baş verdiyi zamanlar yaranır. Əgər proqramda yalnız bir neçə goroutine map-dən dəyərləri oxuyursa və dəyişdirmirsə, bu təhlükəsizdir. Amma ən azı bir goroutine map-i dəyişdirirsə, sinxronizasiya mexanizmlərindən, məsələn, sync.RWMutex və ya sync.Map istifadə etmək lazımdır.
Sync.RWMutex istifadə edərək təhlükəsiz oxuma nümunəsi:
var m = make(map[string]int)
var mu sync.RWMutex
func read(key string) int {
mu.RLock()
defer mu.RUnlock()
return m[key]
}
func write(key string, value int) {
mu.Lock()
defer mu.Unlock()
m[key] = value
}
Beləliklə, yazmadan eyni vaxtda oxuma təhlükəsizdir, amma yazma zamanı sinxronizasiya tələb olunur.