Ç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:
- 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
}
- 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")
- 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.