Sobes.tech
Junior — Middle

Qaysi holatlarda ma'lumotlar poygası (Data Race) yuzaga kelishi mumkin va uni qanday oldini olish mumkin?

sobes.tech AI

AIdan javob

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