【发布时间】:2021-12-08 14:42:03
【问题描述】:
有什么办法可以防止主线程崩溃?
我希望主线程在这个内存访问冲突异常发生后继续运行。
std::thread {
[]() {
for (auto i = 0; i < 10; ++i) {
std::cout << "Hello World from detached thread!\n";
std::this_thread::sleep_for(std::chrono::milliseconds(500));
}
std::cout << "Boom!\n";
*(int*)(0) = 42;
}
}.detach();
while (true) {
std::cout << "Hello World!\n";
std::this_thread::sleep_for(std::chrono::milliseconds(500));
}
【问题讨论】:
-
技术上这是可能的,但是您应该专注于消除访问冲突和其他内存损坏问题的可能性。
-
因此,在一个线程(与所有其他线程共享地址空间)损坏内存后,您希望所有其他线程继续进行,就好像一切都很好,并继续使用损坏的内存?对我来说,这听起来像是灾难的秘诀。
-
如果一个线程崩溃,它会使运行时支持库处于无效状态,它可能由于自身或其他线程造成的内存损坏而崩溃。对于非关键任务系统,我通常的建议是 - 尽快记录(如果可能)并退出程序。
-
如果线程崩溃,Crom 只知道它带来了什么。让程序死掉并重新启动,你几乎肯定最好还是失败。
-
处理这些事情的常用方法是使用多个进程。无论杀死一个子进程(不仅仅是访问冲突!)只会影响子进程,而不是可以做出相应反应的父进程。
标签: c++ multithreading