我使用pthread使用C ++(而不是C ++ 11)的多线程应用程序。所以,我有几个线程与相应的线程函数并行运行。在主线程块中,我有try-catch块但在线程函数内,我没有。每个线程函数(除main之外)运行while(1)循环并在主线程指定退出时设置某个条件时中断。条件变量检查和设置都在互斥锁中完成,以确保互斥。但是,在一个线程函数中,发生了一些异常,线程变成了一个僵尸,应用程序崩溃了。 pstack核心无法正确显示堆栈跟踪,因为它可能已损坏。我的问题是:我是否应该使用try-catch块来处理带有线程函数的异常?当然在try块之外应该有while(1)block within和catch块应该优雅地处理异常然后可能优雅地结束。我可以从传递给第二个线程的子线程传递异常吗?理想情况下不是。什么应该是最佳做法?
答案 0 :(得分:1)
我应该使用try-catch块来处理带有线程函数的异常 太?
是的,因为异常是基于堆栈的机制。由于每个线程都有自己的堆栈,因此它有自己的例外。
如果您没有语言支持来传递异常,则必须使用“手动”复制catch中的异常对象,并通过某些特定于您的线程间通信信号通知需要知道的任何线程。设计。