Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: mutex, rwmutex, critical section, race condition

Как сделать in-memory репозиторий потокобезопасным и не убить производительность?

Проверяет опыт работы с in-memory.

Короткий ответ

Оборачивайте критические секции мьютексом так, чтобы проверка и запись были атомарны. Используйте sync.RWMutex для разделения чтения/записи, избегайте «глобальной» блокировки на всё, если возможно — дробите на более мелкие замки.

Длинный ответ

Проблема: гонки при параллельных запросах (check-then-act).

  • Приёмы:

  • RWMutex: многие читатели, единственный писатель;

  • «тонкий» лок вокруг минимально необходимого участка;

  • инкапсуляция коллекций, чтобы никто не модифицировал их без блокировки.

  • Пример (упрощённо):

type Repo struct {
    mu    sync.RWMutex
    items map[string]Order
}

func (r *Repo) Get(id string) (Order, bool) {
    r.mu.RLock(); defer r.mu.RUnlock()
    o, ok := r.items[id]
    return o, ok
}

func (r *Repo) Create(o Order) error {
    r.mu.Lock(); defer r.mu.Unlock()
    if _, exists := r.items[o.ID]; exists {
        return ErrDuplicate
    }
    r.items[o.ID] = o
    return nil
}
  • Антипаттерн: «взяли глобальный Lock() в начале метода и держим до конца везде».

  • Вывод: блокируйте там, где нужна атомарность; разделяйте чтение и запись.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • Golang

    Golang

Ключевые слова

#mutex

#rwmutex

#critical section

#race condition

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.