Мьютекс при чтении из мапы?

Пишу простенькое хранилище сессий...
import "sync"

type Session struct {...}

type SessionStorage struct {                                             
    sync.Mutex
    sessions map[string]Session
    ...
}

func (s *SessionStorage) Get(id string) (Session, bool) {
    s.Lock()
    v, ok := s.sessions[id]
    s.Unlock()
    return v, ok
}

func (s *SessionStorage) Set(id string, session Session) {
    s.Lock()
    s.sessions[id] = session
    s.Unlock()
}
...


У меня возник вопрос. Нужно ли синхронизировать чтение из мапы ( метод Get(...) ), или в Go это атомарная операция?
  • Вопрос задан
  • 268 просмотров
Решения вопроса 1
uvelichitel
@uvelichitel Куратор тега Go
habrahabr.ru/users/uvelichitel
Вам нужен RWMutex https://pkg.go.dev/sync#RWMutex Только чтение, вообще без записи не гарантировано спецификацией, но потокобезопасно в текущей реализации. Если предпологается запись тоже вам нужен RWMutex.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы