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

Забыли join

Вопрос

Что произойдёт, если объект std::thread уничтожен, а у него не вызвали ни join(), ни detach()?

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

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

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

Коротко

Правильный ответ: Вызовется std::terminate. Деструктор std::thread для joinable-потока вызывает std::terminate: стандарт не стал угадывать, ждать или отпускать. std::jthread (C++20) в деструкторе сам запрашивает остановку и делает join. - Ожидание в деструкторе это поведение…

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

  1. Деструктор дождётся завершения потока
  2. Поток будет отсоединён автоматически
  3. Поток будет принудительно остановлен
  4. Вызовется std::terminateправильный ответ

Разбор

Деструктор std::thread для joinable-потока вызывает std::terminate: стандарт не стал угадывать, ждать или отпускать. std::jthread (C++20) в деструкторе сам запрашивает остановку и делает join.

  • Ожидание в деструкторе это поведение jthread.
  • Автоматического detach нет.
  • Принудительной остановки потоков в C++ нет вообще.

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

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