Sobes.tech
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.Mutex yordamida xaritaga kirishni bloklash.
  • sync.RWMutex yordamida 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]
}