C ++ 11 безопасно присоединяется к потоку без использования блока try / catch

Согласно документацииВот а такжеВот, метод соединения потока C ++ 11 будет бросатьstd::system_error еслиjoinable() == false, Таким образом, естественный способ ожидания выполнения потока - это что-то вроде:

if (thread2.joinable()) thread2.join();

Однако, у этого есть возможность бросить std :: system_error. Предположим, что поток 1 вызывает thread2.joinable (), возвращает true, указывая, что thread2 все еще работает. Затем планировщик приостанавливает поток 1 и переключает контексты в поток 2. Поток 2 завершается, а затем поток 1 возобновляется. Поток 1 вызывает thread2.join (), но thread2 уже завершен, и в результате выдается std :: system_error.

Возможное решение - обернуть все это в блок try:

try {
    thread2.join();
catch (std::system_error &e) {}

Но тогда, когда законный std :: system_error брошен, возможно, чтобы указать, что потокне удалось присоединиться, программа продолжается, действуя так, как будто все в порядке. Есть ли правильный способ присоединиться к потоку помимо использования блока try / catch, подобного этому?

Ответы на вопрос(1)

Ваш ответ на вопрос