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