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-დან და ამცირებს შეჯახების პირობებს.