如何监视意外退出的线程

How to monitor Unexpectedly exited Threads?

本文关键字:意外 退出 线程 监视 何监视      更新时间:2023-10-16

在多线程编程中,如果其中一个工作线程意外退出,主线程需要知道该线程是否处于活动状态,该怎么办。

有办法查一下吗?

我想知道是否有一个典型的信号是在工作线程退出时发出的。

(Linux)

感谢

如果程序中的线程意外死亡,那就是toast。如果您想要故障隔离和恢复,请使用多个进程(具有共享内存),而不是线程,或者不需要线程。在POSIX(以及Win32)上,您可以检测进程共享互斥体的所有者在持有该互斥体时是否死亡,并对共享数据进行一些"类似fsck"的检查和修复,以尝试恢复其不变量。(显然,如果在设计数据结构时考虑到可恢复的事务,它会对您有所帮助。)

在Win32上,您可以使用Windows结构化异常处理(SEH)来捕获线程中的任何类型的异常。(例如访问违规,除以零,…).使用工具帮助API,您可以获得附加模块的列表,并且有用于读取机器寄存器、错误地址等的接口。

在POSIX中,您可以通过信号处理来做到这一点。像访问违规这样的事件会将信号传递到它们所属的线程。

将这些部分编码到恢复策略中以保持有缺陷的程序运行似乎是不现实的。