如何监视意外退出的线程
How to monitor Unexpectedly exited Threads?
在多线程编程中,如果其中一个工作线程意外退出,主线程需要知道该线程是否处于活动状态,该怎么办。
有办法查一下吗?
我想知道是否有一个典型的信号是在工作线程退出时发出的。
(Linux)
感谢
如果程序中的线程意外死亡,那就是toast。如果您想要故障隔离和恢复,请使用多个进程(具有共享内存),而不是线程,或者不需要线程。在POSIX(以及Win32)上,您可以检测进程共享互斥体的所有者在持有该互斥体时是否死亡,并对共享数据进行一些"类似fsck"的检查和修复,以尝试恢复其不变量。(显然,如果在设计数据结构时考虑到可恢复的事务,它会对您有所帮助。)
在Win32上,您可以使用Windows结构化异常处理(SEH)来捕获线程中的任何类型的异常。(例如访问违规,除以零,…).使用工具帮助API,您可以获得附加模块的列表,并且有用于读取机器寄存器、错误地址等的接口。
在POSIX中,您可以通过信号处理来做到这一点。像访问违规这样的事件会将信号传递到它们所属的线程。
将这些部分编码到恢复策略中以保持有缺陷的程序运行似乎是不现实的。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 在C++中对T*类型执行std::move的意外行为
- 创建LinkedList退出,返回代码为-11(SIGSEGV)
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 如何让LLDB在成功时退出,在失败时等待
- C++控制台应用程序阻止退出
- 程序在执行程序的其余部分之前退出
- 处理除以零会导致<csignal>意外行为
- 构造函数在退出函数时无法初始化一个参数
- 使用vscode调试时,GDB意外退出
- C++ 程序意外退出
- 使用海湾合作委员会进行消毒,导致意外提前退出
- Qt - 意外的 GDB 退出
- PHP7 和 IIS8 HTTP 错误 500.0 - FastCGI 进程意外退出
- Xcode 6 在我按下输出窗口后意外退出
- 在 g++ 中使用 -pass-exit-code 时出现意外的退出状态
- 在lxc容器上调试意外退出且没有错误的C++程序
- 如何监视意外退出的线程
- Visual Studio 2015+libtcod-意外退出