首页 > 解决方案 > std::thread 导致程序中止

问题描述

我有以下代码片段:

#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()等到线程执行结束。但是,它似乎也可以防止中止的发生。有人可以解释发生了什么吗?

标签: c++multithreadingc++11abort

解决方案


有人可以解释发生了什么吗?

从析构函数的文档中std::thread

如果 *this 有关联的线程 (joinable() == true),std::terminate()则调用。

在示例中,您未能加入线程,因此当它被销毁时它是可加入的,因此std::terminate()调用了该进程。默认std::terminate()调用std::abort.

如果你加入,那么在加入之后,线程将无法加入。因此std::terminate()不会被召唤毁灭。


推荐阅读