如何监视意外退出的线程?

时间:2012-03-12 04:33:54

标签: c++ multithreading

在多线程编程中,如果一个工作线程意外退出并且主线程需要知道该线程是否存活,该怎么办。

有没有办法检查这个?

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

(Linux)的

谢谢

1 个答案:

答案 0 :(得分:2)

如果程序中的线程意外死亡,那就是吐司。如果您希望通过恢复进行故障隔离,请使用多个进程(使用共享内存)代替线程,或者使用多个进程。在POSIX(以及Win32)上,您可以检测进程共享互斥锁的所有者是否在持有该互斥锁时死亡,并执行一些“fsck-like”检查和修复共享数据以尝试恢复其不变量。 (显然,如果数据结构的设计考虑了可恢复的事务,它会对您有所帮助。)

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

在POSIX中,你可以通过信号处理来做到这一点。违反访问权限等事件会向其所属的线程发送信号。

将这些部分编码为试图阻止程序运行的恢复策略似乎并不现实。