std :: thread вызывает прерывание программы - PullRequest
0 голосов
/ 20 июня 2020

У меня есть следующий фрагмент кода:

#include <thread>
int main(){
    std::thread trial([](){ return 2;});
    //trial.join()
    return 0;
}

Отсюда я получаю следующий результат:

terminate called without an active exception
[1]    17963 abort (core dumped)  ./a.out

Теперь этого не происходит, когда я вызываю .join() после Я создаю нить. Насколько мне известно, .join() ожидает завершения выполнения потока. Однако, похоже, это также предотвращает прерывание. Может кто-нибудь объяснить, что происходит?

1 Ответ

3 голосов
/ 20 июня 2020

Может ли кто-нибудь объяснить, что происходит?

Из документации деструктора std::thread:

Если * это имеет связанный поток ( joinable () == true) вызывается std::terminate().

В этом примере вам не удалось присоединиться к потоку, поэтому он может быть присоединен, когда он уничтожен, поэтому процесс std::terminate() является называется. По умолчанию std::terminate() вызывает std::abort.

Если вы действительно присоединитесь, то после присоединения поток не будет доступен. Следовательно, std::terminate() не будет вызван на разрушение.

...