Sobes.tech
Junior — Middle

In welchen Situationen kann es zu einem Data Race kommen und wie kann man es vermeiden?

sobes.tech KI

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