Back to questions
Avito
Senior
4
Что такое гонка данных?
Companies where asked
Answer from AI
sobes.tech AI
Гонка данных (data race) — это ситуация в многопоточных программах, когда два или более потока одновременно обращаются к одной и той же переменной, и при этом хотя бы один из них выполняет запись, без должной синхронизации. Это приводит к неопределённому поведению и трудноуловимым ошибкам.
В Go гонки данных можно обнаружить с помощью инструмента -race при запуске программы:
go run -race main.go
Пример гонки данных:
package main
import (
"fmt"
"time"
)
func main() {
var counter int
go func() {
counter = 1
}()
counter = 2
time.Sleep(time.Second)
fmt.Println(counter)
}
Здесь два горутины одновременно пишут в counter без синхронизации, что и вызывает гонку данных. Чтобы избежать, используют мьютексы, каналы или другие механизмы синхронизации.