Sobes.tech
Junior — Middle

Bir nechta goroutinelardan bir vaqtning o'zida kirish paytida Map kabi umumiy resurslarni xavfsiz foydalanish mumkinmi?

sobes.tech AI

AIdan javob

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")