Junior — Middle
Dans quelles situations peut-il y avoir une course de données (Data Race) et comment l'éviter?
sobes.tech IA
Réponse de l'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, который помогает обнаружить гонки данных во время выполнения программы.