Junior — Middle
Birden fazla iş parçacığından aynı anda bir Map nesnesinin değiştirilmesi sırasında ConcurrentModificationException istisnasının oluşmasını önlemek için hangi önlemler alınmaktadır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Go'da, harita (map) aynı anda birden fazla goroutine tarafından okuma ve yazma işlemleri için güvenli değildir. ConcurrentModificationException'ı (Go'da karşılığı, eşzamanlı erişim nedeniyle panik) önlemek için aşağıdaki önlemler alınır:
- Harita erişimini senkronize etmek için mutex (
sync.Mutexveyasync.RWMutex) kullanımı. - Özellikle eşzamanlı erişim için tasarlanmış,
sync.Mapgibi güvenli veri yapılarının kullanımı.
Mutex ile örnek:
var mu sync.RWMutex
var m = make(map[string]int)
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
}
sync.Map kullanımı:
var m sync.Map
func write(key string, value int) {
m.Store(key, value)
}
func read(key string) (int, bool) {
val, ok := m.Load(key)
if !ok {
return 0, false
}
return val.(int), true
}
Bu şekilde, eşzamanlı erişimlerde hataları önlemek için senkronizasyon veya özel yapılar kullanılmalıdır.