Sobes.tech
Junior — Middle

როგორ შეიძლება უზრუნველყოს Map ობიექტის ნაკადის უსაფრთხოება Mutex ტიპის ბლოკირების მექანიზმის გამოყენებით?

sobes.tech AI

პასუხი AI-სგან

Go ენის ფარგლებში, ობიექტის map ნაკადის უსაფრთხოების უზრუნველსაყოფად, შესაძლებელია გამოყენებულ იქნას mutex (sync.Mutex). რადგან სტანდარტული map არ არის ნაკადის უსაფრთხო, ოპერაციების წაკითხვა და დაწერა უნდა იყოს დაცული ბლოკირებით.

მაგალითი:

import (
    "sync"
)

type SafeMap struct {
    mu sync.Mutex
    m  map[string]int
}

func NewSafeMap() *SafeMap {
    return &SafeMap{
        m: make(map[string]int),
    }
}

func (s *SafeMap) Get(key string) (int, bool) {
    s.mu.Lock()
    defer s.mu.Unlock()
    val, ok := s.m[key]
    return val, ok
}

func (s *SafeMap) Set(key string, value int) {
    s.mu.Lock()
    defer s.mu.Unlock()
    s.m[key] = value
}

func (s *SafeMap) Delete(key string) {
    s.mu.Lock()
    defer s.mu.Unlock()
    delete(s.m, key)
}

ამ გზით, ყოველი map ოპერაციის წინ mutex-ი იკეტება, რაც თავიდან აცილებს ერთდროულ წვდომას რამდენიმე goroutine-დან და ამცირებს შეჯახების პირობებს.