Sobes.tech
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.Mutex veya sync.RWMutex) kullanımı.
  • Özellikle eşzamanlı erişim için tasarlanmış, sync.Map gibi 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.