В каких ситуациях может произойти гонка данных (Data Race) и как её избежать?

Гонка данных (Data Race) возникает, когда несколько горутин (потоков) одновременно обращаются к одной и той же переменной, и хотя бы одна из них пытается её изменить, без должной синхронизации.

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

Что ответить на собеседовании

Гонка данных (Data Race) возникает, когда несколько горутин (потоков) одновременно обращаются к одной и той же переменной, и хотя бы одна из них пытается её изменить, без должной синхронизации.

Подробный разбор

Ответ с пояснениями

Гонка данных (Data Race) возникает, когда несколько горутин (потоков) одновременно обращаются к одной и той же переменной, и хотя бы одна из них пытается её изменить, без должной синхронизации.

Например, если две горутины одновременно увеличивают общий счётчик без блокировки, итоговое значение может быть некорректным.

Чтобы избежать гонок данных в Go, используют:

  • Мьютексы (sync.Mutex) для блокировки доступа к общим ресурсам.
  • Каналы (chan) для передачи данных между горутинами, избегая совместного доступа.
  • Пакет sync/atomic для атомарных операций с переменными.

Пример с мьютексом:

var mu sync.Mutex
var counter int

func increment() {
    mu.Lock()
    counter++
    mu.Unlock()
}

Также в Go есть инструмент go run -race, который помогает обнаружить гонки данных во время выполнения программы.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее