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:
- 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
}
- 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.