Sobes.tech
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.