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