Junior — Middle
Dastur mapdan qiymatlarni bir vaqtning o'zida raqobatli tarzda o'qiyotganda qanday harakat qiladi?
sobes.tech AI
AIdan javob
Go tilida, mapdan bir vaqtning o'zida xavfsiz o'qish panik yoki xatolik keltirib chiqarmaydi. Muammolar yozish yoki yozish va o'qishni bir vaqtning o'zida amalga oshirilganda yuzaga keladi. Agar dasturda faqat bir nechta goroutinlar mapdan qiymatlarni o'qiyotgan bo'lsa va ularni o'zgartirmasa, bu xavfsizdir. Ammo agar kamida bitta goroutin mapni o'zgartirayotgan bo'lsa, sinxronizatsiya mexanizmlari, masalan, sync.RWMutex yoki sync.Map, ishlatilishi kerak.
Sync.RWMutex yordamida xavfsiz o'qish misoli:
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
}
Shunday qilib, yozmasdan bir vaqtning o'zida o'qish xavfsiz, ammo yozish mavjud bo'lsa, sinxronizatsiya talab qilinadi.