Junior — Middle
Kā nodrošināt Map objekta drošību daudzvloku vidē, izmantojot Mutex tipa bloķēšanas mehānismu?
sobes.tech AI
Atbilde no AI
Go valodā, lai nodrošinātu map objekta pavedienu drošību, var izmantot mutex (sync.Mutex). Tā kā standarta map nav droša vairāku pavedienu piekļuvei, lasīšanas un rakstīšanas operācijas ir jāaizsargā ar bloķēšanu.
Piemērs:
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)
}
Šādā veidā pirms katras operācijas ar map tiek bloķēts mutex, kas novērš vienlaicīgu piekļuvi no vairākiem gorutīniem un novērš sacensību apstākļus.