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