Sobes.tech
Junior — Middle

Ko'p ipli muhitda Map bilan ishlashda xavfsizlikni qanday ta'minlash mumkin?

sobes.tech AI

AIdan javob

Go tilida, standart xarita (map) bir vaqtning o'zida turli goroutinlardan o'qish va yozish uchun xavfsiz emas. Ko'p ipli muhitda xaritalar bilan ishlashda xavfsizlikni ta'minlash uchun quyidagilarni ishlatish mumkin:

  1. Miyoklar (sync.Mutex yoki sync.RWMutex) — xaritaga o'qish/yozish vaqtida kirishni bloklaydi.
var (
    m = make(map[string]int)
    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
}
  1. sync.Map — standart kutubxonadan maxsus xavfsiz, ko'p goroutinlar uchun optimallashtirilgan tuzilma.
var m sync.Map

func write(key string, value int) {
    m.Store(key, value)
}

func read(key string) (int, bool) {
    val, ok := m.Load(key)
    if !ok {
        return 0, false
    }
    return val.(int), true
}

Tanlov aniq vazifaga bog'liq: agar yozish va o'qish operatsiyalari ko'p bo'lsa, mutexlardan foydalanish yaxshiroq; agar operatsiyalar asosan o'qishga mo'ljallangan bo'lsa, sync.Map samaraliroq bo'lishi mumkin.