Junior — Middle
Көптөгөн чөйрөдө Map'тен маалыматтарды бир убакта окуу менен коопсуздукту камсыз кылуу мүмкүнбү?
sobes.tech AI
AIден жооп
Goда стандарттык карта (map) бир убакта коргоо үчүн коопсуз эмес. Эгер бир нече goroutine mapтен окуп жатса жана жазбай жатса, бул коопсуз. Бирок, эгер кеминде бир goroutine mapке жазып жатса, бир убакта окуу жана жазуу паникага алып келет.
Коопсуз бир убакта mapтен окуу үчүн жазбай туруп, жөнөкөй map колдонсо болот жана синхрондоштуруу талап кылынбайт. Бирок, жазуу мүмкүнчүлүгү болсо, синхрондоштуруу колдонуш керек, мисалы, sync.RWMutex же sync.Map аркылуу, ал атайын атаандаштыкка туруштук берүү үчүн иштелип чыккан.
sync.RWMutex менен коопсуз окуу жана жазуу мисалы:
var (
m = make(map[string]int)
mu sync.RWMutex
)
// Жазуу
func write(key string, value int) {
mu.Lock()
defer mu.Unlock()
m[key] = value
}
// Окуу
func read(key string) (int, bool) {
mu.RLock()
defer mu.RUnlock()
val, ok := m[key]
return val, ok
}
Эгер сиз кепилдик берсеңиз, map өзгөрбөйтүнчө, бир убакта окуу коопсуз болот кошумча синхрондоштуруу талап кылынбайт.