Junior — Middle
Çok iş parçacıklı ortamda Map'ten veri okurken güvenliği sağlamak mümkün mü?
sobes.tech yapay zeka
AI'dan gelen yanıt
Go'da, standart harita (map) eşzamanlı erişim için güvenli değildir. Birden fazla goroutine map'ten okuma yapıyorsa, bu güvenlidir. Ancak, en az bir goroutine map'e yazıyorsa, eşzamanlı okuma ve yazma panik ile sonuçlanır.
Yazma olmadan güvenli okuma için, normal bir map kullanabilirsiniz ve senkronizasyon gerekmez. Ancak, yazma olasılığı varsa, sync.RWMutex veya sync.Map kullanarak senkronizasyon yapmalısınız; sync.Map, özellikle eşzamanlı erişim için tasarlanmıştır.
sync.RWMutex ile güvenli okuma ve yazma örneği:
var (
m = make(map[string]int)
mu sync.RWMutex
)
// Yazma
func write(key string, value int) {
mu.Lock()
defer mu.Unlock()
m[key] = value
}
// Okuma
func read(key string) (int, bool) {
mu.RLock()
defer mu.RUnlock()
val, ok := m[key]
return val, ok
}
Eğer, map'in başlangıçtan sonra değişmediğini garanti ediyorsanız, eşzamanlı okuma ek bir senkronizasyon olmadan güvenlidir.