Junior — Middle
Көптөгөн агымдардан бир мезгилде Map объектисин өзгөртүүнү алдын алуу үчүн кандай чаралар көрүлүүдө?
sobes.tech AI
AIден жооп
Goда карта (map) бир убакта бир нече горутинден окуу жана жазуу үчүн коопсуз эмес. ConcurrentModificationException (Goда анын эквиваленти — бир убакта жеткиликтүүлүккө байланыштуу паника) алдын алуу үчүн төмөнкү чаралар колдонулат:
- Картага жетүү үчүн mutex (
sync.Mutexжеsync.RWMutex) колдонуу. - Конкуренттик жеткиликтүүлүк үчүн атайын иштелип чыккан структуралар, мисалы,
sync.Map, колдонуу.
Мисал муутекс менен:
var mu sync.RWMutex
var m = make(map[string]int)
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 колдонуу:
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
}
Мындай жол менен, бир убакта картага жетүүдө ката болбоо үчүн синхрондоштуруу же атайын структураларды колдонуу керек.