Junior — Middle
Çok iş parçacıklı ortamda Map ile çalışırken güvenliği nasıl sağlayabilirsiniz?
sobes.tech yapay zeka
AI'dan gelen yanıt
Go dilinde, standart harita (map) farklı goroutine'lerden aynı anda okuma ve yazma işlemleri için güvenli değildir. Çoklu iş parçacıklı ortamda haritalarla çalışırken güvenliği sağlamak için şu yöntemler kullanılabilir:
- Mutexler (sync.Mutex veya sync.RWMutex) — okuma/yazma sırasında haritaya erişimi engeller.
var (
m = make(map[string]int)
mu sync.RWMutex
)
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 — standart kütüphaneden özel olarak tasarlanmış, çok sayıda goroutine ile kullanılmaya uygun, güvenli bir yapı.
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
}
Seçim, belirli göreve bağlıdır: çok sayıda yazma ve okuma işlemi gerekiyorsa mutexler kullanmak daha iyidir; işlemler çoğunlukla okuma ise, sync.Map daha verimli olabilir.