Middle — Middle+
Çox ipli mühitdə Map kolleksiyası ilə təhlükəsiz işləməni necə təmin etmək olar?
sobes.tech Süni İntellekt
AI-dan cavab
Go-da standart xəritə (map) müxtəlif goroutinlərdən eyni zamanda oxuma və yazma üçün təhlükəsiz deyil. Çox ipli mühitdə xəritənin təhlükəsiz işləməsini təmin etmək üçün aşağıdakı yanaşmalar istifadə oluna bilər:
- Mutex ilə sinxronizasiya
sync.Mutex və ya sync.RWMutex istifadə edərək xəritəyə girişləri qoruyun. Yazarkən mutex-i bağlayın, oxuyarkən isə — oxuma üçün (əgər RWMutex istifadə edirsinizsə).
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 istifadə
Go-da, eyni zamanda giriş üçün optimallaşdırılmış və əl ilə sinxronizasiya tələb etməyən sync.Map adlı xüsusi struktur mövcuddur.
import "sync"
var m sync.Map
// Yazma
m.Store("key", 42)
// Oxuma
val, ok := m.Load("key")
- Kanal (channels) istifadə
Map-ə giriş, oxuma və yazma tələblərini kanallar vasitəsilə idarə edən goroutine ilə təşkil edilə bilər, bu da ardıcıl giriş təmin edir.
Yöntəm seçimi, xüsusi performans və tətbiq mürəkkəbliyinə bağlıdır.