Sobes.tech
Junior — Middle

Ko'p ipli muhitda Map'dan ma'lumotlarni bir vaqtning o'zida o'qishda xavfsizlikni ta'minlash mumkinmi?

sobes.tech AI

AIdan javob

Go'da, standart xarita (map) bir vaqtning o'zida xavfsiz emas. Agar bir nechta goroutinlar mapdan yozmasdan o'qiyotgan bo'lsa, bu xavfsiz. Ammo, agar kamida bir goroutin mapga yozayotgan bo'lsa, bir vaqtning o'zida o'qish va yozish panikaga olib keladi.

Yozmasdan xavfsiz o'qish uchun, oddiy mapdan foydalanishingiz mumkin va sinxronizatsiya talab qilinmaydi. Ammo yozish imkoniyati bo'lsa, sinxronizatsiya qilish kerak, masalan, sync.RWMutex yoki sync.Map yordamida, bu ayniqsa, ko'p oqimli kirish uchun mo'ljallangan.

sync.RWMutex bilan xavfsiz o'qish va yozish misoli:

var (
    m = make(map[string]int)
    mu sync.RWMutex
)

// Yozish
func write(key string, value int) {
    mu.Lock()
    defer mu.Unlock()
    m[key] = value
}

// O'qish
func read(key string) (int, bool) {
    mu.RLock()
    defer mu.RUnlock()
    val, ok := m[key]
    return val, ok
}

Agar siz garantilayotgan bo'lsangiz, map faqat boshlang'ichdan keyin o'zgarmaydi, unda bir vaqtning o'zida o'qish xavfsiz bo'ladi, qo'shimcha sinxronizatsiya talab qilinmaydi.