Junior — Middle
Mutex kabi blokirovka mexanizmi yordamida Map ob'ektining oqim xavfsizligini qanday ta'minlash mumkin?
sobes.tech AI
AIdan javob
Go tilida, map ob'ektining iptidosizligini ta'minlash uchun sync.Mutex dan foydalanish mumkin. Standart map bir vaqtning o'zida kirishga xavfsiz emas, shuning uchun o'qish va yozish operatsiyalarini bloklash bilan himoyalash kerak.
Misol:
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)
}
Shu tarzda, har bir map operatsiyasidan oldin mutex bloklanadi, bu esa bir nechta goroutine'larning bir vaqtning o'zida kirishini oldini oladi va raqobat shartlarini bartaraf etadi.