Junior — Middle
Bir veri yapısı olan map'ten güvenli bir şekilde veri okumak mümkün mü?
sobes.tech yapay zeka
AI'dan gelen yanıt
Go'da, map'ten okuma, o anda kimse map'i değiştirmiyorsa güvenlidir. Ancak, paralel olarak yazma işlemi (ekleme, silme veya öğeleri değiştirme) gerçekleşiyorsa, okuma panik (çalışma zamanı hatası) ile sonuçlanabilir.
Çok iş parçacıklı ortamda map'ten güvenli okuma yapmak için genellikle şu kullanılır:
- sync.RWMutex — map'i yazma için kilitlemek ve paralel okuma izin vermek için
- sync.Map — çok iş parçacıklı ortamlar için özel ve güvenli bir veri yapısı
RWMutex ile örnek:
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
}
Bu şekilde, yazma ile senkronizasyon sağlandığında güvenli okuma mümkündür.