Sobes.tech
Middle — Middle+

Çok iş parçacıklı ortamda Map koleksiyonuyla güvenli çalışmayı nasıl sağlayabilirsiniz?

sobes.tech yapay zeka

AI'dan gelen yanıt

Go'da standart harita (map), farklı goroutine'lerden aynı anda okuma ve yazma işlemleri için güvenli değildir. Çok iş parçacıklı ortamda haritayı güvenli hale getirmek için aşağıdaki yaklaşımlar kullanılabilir:

  1. Mutex ile Senkronizasyon

sync.Mutex veya sync.RWMutex kullanarak haritaya erişimi koruyabilirsiniz. Yazarken mutex'i kilitleyin, okurken — okuma kilidi kullanın (eğer RWMutex kullanıyorsanız).

import "sync"

type SafeMap struct {
    mu sync.RWMutex
    m  map[string]int
}

func (s *SafeMap) Get(key string) (int, bool) {
    s.mu.RLock()
    defer s.mu.RUnlock()
    val, ok := s.m[key]
    return val, ok
}

func (s *SafeMap) Set(key string, val int) {
    s.mu.Lock()
    defer s.mu.Unlock()
    s.m[key] = val
}
  1. sync.Map Kullanımı

Go'da, eşzamanlı erişim için optimize edilmiş ve manuel senkronizasyon gerektirmeyen sync.Map adlı özel bir yapı vardır.

import "sync"

var m sync.Map

// Yazma
m.Store("key", 42)

// Okuma
val, ok := m.Load("key")
  1. Kanalların (channels) kullanımı

Map'e erişimi, okuma ve yazma taleplerini kanallar aracılığıyla işleyen bir goroutine ile organize edebilirsiniz, böylece sıralı erişim sağlanır.

Yöntem seçimi, performans ve uygulama karmaşıklığına ilişkin özel gereksinimlere bağlıdır.