Можно ли завершить работу стандартного потока, запущенного внутри создающего его потока?

В стандартной библиотеке C++ нет прямого способа принудительно завершить поток извне или изнутри другого потока. Поток должен сам завершить свою работу, например, по условию или флагу.

Короткий ответ

Что ответить на собеседовании

В стандартной библиотеке C++ нет прямого способа принудительно завершить поток извне или изнутри другого потока. Поток должен сам завершить свою работу, например, по условию или флагу.

Подробный разбор

Ответ с пояснениями

В стандартной библиотеке C++ нет прямого способа принудительно завершить поток извне или изнутри другого потока. Поток должен сам завершить свою работу, например, по условию или флагу.

Если поток запущен внутри создающего его потока, то для завершения работы стандартного потока обычно используют:

  • Флаги или условные переменные: поток периодически проверяет флаг завершения и корректно выходит.
  • std::thread::join(): вызывающий поток ожидает завершения дочернего.

Пример:

#include <thread>
#include <atomic>
#include <iostream>
#include <chrono>

std::atomic<bool> stopFlag(false);

void worker() {
    while (!stopFlag.load()) {
        std::this_thread::sleep_for(std::chrono::milliseconds(100));
        std::cout << "Работаю...\n";
    }
    std::cout << "Поток завершает работу.\n";
}

int main() {
    std::thread t(worker);
    std::this_thread::sleep_for(std::chrono::seconds(1));
    stopFlag.store(true); // сигнал потоку завершиться
    t.join();
    return 0;
}

Таким образом, поток сам контролирует момент завершения, а внешний поток лишь сигнализирует об этом.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку