Sobes.tech
Back to questions
Senior
4

Что такое гонка данных?

Companies where asked
AvitoAvito

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