Junior — Middle
Birden fazla goroutine'den aynı anda erişildiğinde, Map gibi ortak kaynaklar güvenle kullanılabilir mi?
sobes.tech yapay zeka
AI'dan gelen yanıt
Hayır, Go'daki standart harita (map) eşzamanlı erişim için güvenli değildir ve ek senkronizasyon olmadan aynı anda birkaç goroutine tarafından kullanılamaz. Korumasız eşzamanlı erişim yarış koşullarına ve paniklere neden olabilir.
Ortak kaynaklar olan haritaları çok iş parçacıklı ortamda güvenli kullanmak için:
- sync.Mutex veya sync.RWMutex kullanarak haritaya erişimi koruyabilirsiniz.
- sync.Map kullanabilirsiniz; bu, haritalar için özel ve güvenli bir veri yapısıdır.
Mutex ile örnek:
var mu sync.Mutex
var m = make(map[string]int)
func write(key string, value int) {
mu.Lock()
m[key] = value
mu.Unlock()
}
func read(key string) int {
mu.Lock()
defer mu.Unlock()
return m[key]
}
sync.Map kullanımı:
var m sync.Map
m.Store("key", 42)
value, ok := m.Load("key")