Sobes.tech
Junior — Middle

Çox ipli mühitdə Map ilə işləyərkən təhlükəsizliyi necə təmin etmək olar?

sobes.tech Süni İntellekt

AI-dan cavab

Go dilində, 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ələrlə işləyərkən təhlükəsizliyi təmin etmək üçün aşağıdakı metodlardan istifadə etmək olar:

  1. Müəyyənlər (sync.Mutex və ya sync.RWMutex) — oxuma/yazma zamanı xəritəyə girişə mane olur.
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
}
  1. sync.Map — standart kitabxanadan xüsusi olaraq hazırlanmış, çox sayda goroutine üçün optimallaşdırılmış təhlükəsiz struktur.
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 konkret tapşırığa bağlıdır: çoxlu yazma və oxuma əməliyyatları tələb olunursa, mutexlər istifadə etmək daha yaxşıdır; əməliyyatlar əsasən oxumağa yönəlibsə, sync.Map daha səmərəli ola bilər.