Junior — Middle
Bir nechta goroutine bir vaqtning o'zida xaritadagi bir xil kalitga kirishga harakat qilsa nima bo'ladi?
sobes.tech AI
AIdan javob
Go tilida, xarita (map) — bu oqimga xavfsiz bo‘lmagan ma’lumotlar tuzilmasi. Agar bir nechta goroutinlar bir vaqtning o‘zida bir xil xaritaga o‘qish va/yoki yozishsa, bu ma’lumotlar uchun raqobat shartlari va ehtimol, ish vaqtida panikaga olib keladi.
Buning oldini olish uchun, sinxronizatsiya mexanizmlaridan foydalanish kerak, masalan:
sync.Mutexyordamida xaritaga kirishni bloklash.sync.RWMutexyordamida o‘qish va yozish uchun bloklarni ajratish.- Maxsus tuzilmalar, masalan,
sync.Map, ular raqobatga bardoshli kirishni ta’minlaydi.
sync.Mutex yordamida xaritani himoya qilish misoli:
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]
}