Вступить в клуб →
средняявопросLinux, многопоточность и сеть

Программа аварийно завершается при выходе из функции с std::thread

void start_background() {
    std::thread t(worker);
    // больше в функции ничего нет
}

При выходе из start_background процесс завершается аварийно, в выводе — сообщение о вызове terminate. Почему?

  • Поток просто продолжит работать в фоне: никакой проблемы в этом коде нет, объект потока уничтожать безопасно
  • Код не соберётся: конструктор std::thread требует вызвать join в той же области видимости, где создан объект
  • Функция worker не успевает стартовать до выхода из start_background, поэтому происходит обращение по нулевому указателю и процесс падает
  • Деструктор std::thread у всё ещё присоединяемого потока вызывает terminate: поток нужно присоединить или отсоединить

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела