Вопрос проверяет понимание фундаментальной проблемы конкурентного программирования.
Data race возникает, когда несколько потоков одновременно обращаются к одним и тем же данным, и хотя бы один из них выполняет запись. Без синхронизации порядок операций становится неопределённым. Это приводит к некорректным результатам и нестабильному поведению программы.
Data race — одна из самых опасных ошибок в многопоточном коде.
Определение: data race — это ситуация, когда:
данные разделяются между потоками
есть одновременный доступ
хотя бы один поток изменяет данные
отсутствует синхронизация
результат выполнения непредсказуем
ошибки зависят от таймингов
баги сложно воспроизвести
var value = 0
DispatchQueue.global().async {
value = 10
}
DispatchQueue.global().async {
print(value)
}
Вывод может быть любым.
Data race:
нарушение модели памяти
undefined behavior
Логическая ошибка:
код корректен технически
но неверен по логике
Data race возникает из-за отсутствия синхронизации при работе с общими данными. Избежать её можно только через контроль доступа.