Запись в общий map из нескольких горутин — гонка. Реализуйте SafeMap: Set под Lock, Get и Len под RLock.
- Задача
- Решение
- Обсуждение
SafeMap: защита карты RWMutex
GolangРешение
func (s *SafeMap) Set(k string, v int) {
s.mu.Lock()
defer s.mu.Unlock()
if s.m == nil {
s.m = make(map[string]int)
}
s.m[k] = v
}
func (s *SafeMap) Get(k string) (int, bool) {
s.mu.RLock()
defer s.mu.RUnlock()
v, ok := s.m[k]
return v, ok
}
func (s *SafeMap) Len() int {
s.mu.RLock()
defer s.mu.RUnlock()
return len(s.m)
}