c++ - 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()
等到线程执行结束。但是,它似乎也可以防止中止的发生。有人可以解释发生了什么吗?
解决方案
有人可以解释发生了什么吗?
从析构函数的文档中std::thread
:
如果 *this 有关联的线程 (joinable() == true),
std::terminate()
则调用。
在示例中,您未能加入线程,因此当它被销毁时它是可加入的,因此std::terminate()
调用了该进程。默认std::terminate()
调用std::abort
.
如果你加入,那么在加入之后,线程将无法加入。因此std::terminate()
不会被召唤毁灭。
推荐阅读
- javascript - 变量内的函数
- r - 自动化 Mann Whitney U 测试以获取大量数据集
- css - 为什么连字符不适用于 Windows 上的 Chrome?
- r - 如何在 r 中使用 svyby 根据其他 2 列的值找到 1 列的中值?
- python - 计算一年中的周数(处理一年的第一周)
- java - MediatorLiveData onChanged 未使用 ROOM + Viewmodel 触发
- java - 共享内部文件给出:未能找到包含 /data/data/com.myapp/app_profiles/profile_1/games/game_1.xml 的已配置根
- knockout.js - 使用 Knockout JS 动态显示/隐藏
- kubernetes - 将本地目录托管到 Kubernetes Pod
- html - 包装输入占位符文本在 Firefox 中不起作用