Sobes.tech
Назад к вопросам
Junior — Middle
71

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

Ответ от нейросети

sobes.tech AI

Гонка данных (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, который помогает обнаружить гонки данных во время выполнения программы.