> Что такое состояние гонки и к чему оно приводит (Go)

Уровень: junior · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: Wildberries

Стек: Go, Java

> Пример ответа

Состояние гонки (race condition) - это ситуация, когда поведение программы зависит от непредсказуемого порядка выполнения потоков или горутин, работающих с общими данными без синхронизации. В Go это часто проявляется при конкурентном доступе к переменным, map, каналам или другим ресурсам без мьютексов или атомарных операций.

Последствия:

  • Непредсказуемые результаты: например, инкремент счётчика двумя горутинами может дать значение меньше ожидаемого из-за чтения/записи в неправильный момент.
  • Паники и краши: конкурентная запись в map (без синхронизации) вызывает runtime panic.
  • Трудноуловимые баги: ошибки проявляются нестабильно, часто только под нагрузкой или на многоядерных системах.

Пример на Go:

GO
var counter int
for i := 0; i < 1000; i++ {
go func() { counter++ }()
}
// Результат counter может быть меньше 1000

Исправление: использовать sync.Mutex или atomic.AddInt64.

В Java аналогичная проблема решается через synchronized, Lock или AtomicInteger.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью