Sobes.tech
Назад к вопросам
Middle+
3

Что такое Data Race и Race Condition? В чём разница?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

Race Condition — ситуация, когда поведение программы зависит от непредсказуемого порядка выполнения нескольких потоков или горутин, что может привести к ошибкам или некорректным результатам.

Data Race — частный случай race condition, когда два или более потока одновременно обращаются к одной и той же переменной, при этом хотя бы один из них выполняет запись, и при этом отсутствует корректная синхронизация.

Разница в том, что все data race — это race condition, но не все race condition связаны с одновременным доступом к данным. Например, race condition может быть вызвано неправильным порядком вызова функций или событий.

В Go data race можно обнаружить с помощью флага -race при запуске:

go run -race main.go

Пример data race:

goroutine 1:
  x = 1

goroutine 2:
  fmt.Println(x)

Если эти операции выполняются одновременно без синхронизации, возникает data race.