Middle — Middle+
Көп иштеген чөйрөдө Map коллекциясы менен ишти коргоо кандай камсыз кылынат?
sobes.tech AI
AIден жооп
Goда стандарттык карта (map) ар дайым бир убакта окуу жана жазуу үчүн коопсуз эмес. Көптөгөн жиптердүү чөйрөдө карта менен иштөөдө коопсуздугун камсыздоо үчүн төмөнкү ыкмаларды колдонсо болот:
- Mutex аркылуу синхрондоштуруу
sync.Mutex же sync.RWMutex колдонуп, картага кирүүнү коргоо. Жазууда mutexти жазуу үчүн бөгөт коюңуз, окууда — окуу үчүн (эгер RWMutex колдонсоңуз).
import "sync"
type SafeMap struct {
mu sync.RWMutex
m map[string]int
}
func (s *SafeMap) Get(key string) (int, bool) {
s.mu.RLock()
defer s.mu.RUnlock()
val, ok := s.m[key]
return val, ok
}
func (s *SafeMap) Set(key string, val int) {
s.mu.Lock()
defer s.mu.Unlock()
s.m[key] = val
}
- sync.Map колдонуу
Goда, бир убакта кирүү үчүн оптималдаштырылган жана кол менен синхрондоштуруу талап кылынбаган sync.Map атайын түзүм бар.
import "sync"
var m sync.Map
// Жазуу
m.Store("key", 42)
// Окуу
val, ok := m.Load("key")
- Каналдар (channels) колдонуу
Картага кирүүнү уюштуруу үчүн, ал суранычтарды иштеткен goroutine аркылуу каналдар менен уюштурууга болот, бул реттілик менен кирүүгө кепилдик берет.
Ыкманы тандоо конкреттүү талаптарга жана ишке ашыруу татаалдыгына көз каранды.