Junior — Middle
¿En qué situaciones puede ocurrir una carrera de datos (Data Race) y cómo evitarla?
sobes.tech AI
Respuesta de la IA
Гонка данных (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, который помогает обнаружить гонки данных во время выполнения программы.