Junior — Middle
In welchen Situationen kann es zu einem Data Race kommen und wie kann man es vermeiden?
sobes.tech KI
Antwort von 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, который помогает обнаружить гонки данных во время выполнения программы.