Выбор ответа Junior Многопоточность и модель памяти спрашивают часто обновлено

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

Вопрос

Два потока без синхронизации выполняют ++counter; для общего int counter. Что говорит стандарт?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Это гонка данных и неопределённое поведение. Конкурентный доступ к одной ячейке без синхронизации, где хотя бы один доступ запись, это data race, UB для всей программы.

Варианты ответа

  1. Значение будет меньше ожидаемого, но поведение определено
  2. Всё корректно: инкремент int атомарен
  3. Это гонка данных и неопределённое поведениеправильный ответ
  4. Компилятор автоматически вставит блокировку

Разбор

Конкурентный доступ к одной ячейке без синхронизации, где хотя бы один доступ запись, это data race, UB для всей программы. Потеря инкрементов лишь самое частое проявление. Нужен std::atomic<int> или мьютекс.

  • «Определённо меньше» неверно: стандарт ничего не гарантирует.
  • ++ для int это чтение, изменение и запись, не атомарные.
  • Автоматической синхронизации нет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.