Junior — Middle
Ko'p ipli muhitda kartaga xavfsiz kirishni qanday ta'minlash mumkin?
sobes.tech AI
AIdan javob
Go tilida, ko'p ipli muhitda xaritaga (map) xavfsiz kirish uchun sinxronizatsiya qilish zarur, chunki map ipli xavfsiz bo'lmagan ma'lumotlar tuzilmasidir. Eng keng tarqalgan usul — mutex (sync.Mutex yoki sync.RWMutex) dan foydalanib, o'qish va yozish vaqtida kirishni bloklash.
sync.RWMutex bilan misol:
import (
"sync"
)
var (
m = make(map[string]int)
mu sync.RWMutex
)
func read(key string) int {
mu.RLock() // o'qish uchun bloklash
defer mu.RUnlock()
return m[key]
}
func write(key string, value int) {
mu.Lock() // yozish uchun bloklash
defer mu.Unlock()
m[key] = value
}
Shuningdek, Go da sync.Map turi ham mavjud, u ko'p ipli xavfsiz xaritani amalga oshiradi va tez-tez o'qish operatsiyalari uchun optimallashtirilgan. Agar qat'iy tiplash talab qilinmasa va soddalik kerak bo'lsa, foydalanish mumkin:
import "sync"
var m sync.Map
m.Store("key", 42) // yozish
value, ok := m.Load("key") // o'qish
Shunday qilib, ko'p ipli muhitda xavfsiz kirish uchun mutexlar yoki sync.Map dan foydalaning.