Sobes.tech
Junior — Middle

Дар кадом ҳолатҳо метавонад рақобати маълумот (Data Race) рӯй диҳад ва чӣ гуна онро пешгирӣ кардан мумкин аст?

sobes.tech AI

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