Junior — Middle
Көп жиптүү чөйрөдө картага коопсуз кирүүнү кантип камсыз кылса болот?
sobes.tech AI
AIден жооп
Go тилинде, көптөгөн жиптердин ортосунда картага (map) коопсуз кирүү үчүн синхрондоштуруу керек, анткени map көптөгөн жиптерге коопсуз эмес структура. Эң кеңири колдонулган ыкма — синхрондоштуруу үчүн mutex (sync.Mutex же sync.RWMutex) колдонуу, окуу жана жазуу учурунда кирүүнү блоктоо.
sync.RWMutex менен мисал:
import (
"sync"
)
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
}
Мындан тышкары, Go тилинде sync.Map типи бар, ал көптөгөн жиптерге коопсуз карта менен иштейт жана тез окуу операциялары үчүн оптимизацияланган. Эгер катуу типтөө керек эмес болсо жана жөнөкөйлүк кааласаңыз, колдонсоңуз болот:
import "sync"
var m sync.Map
m.Store("key", 42) // жазуу
value, ok := m.Load("key") // окуу
Ошентип, көптөгөн жиптердин ортосунда коопсуз кирүү үчүн mutexтерди же sync.Map колдонуу керек.