我的代码有一个pthread_cancel取消一个有try块的线程并捕获所有块(catch(...))。
由于时间问题,当线程在try块中并且线程被取消时,我的程序被中止,因为pthread NTPL引发的异常不会被catch all block捕获,因为线程无法取消。
我查看了几个解决方案,我看到如果通过捕获异常重新抛出异常,则线程会正常取消。
我的问题是 - 即使我们抓住并重新抛出,仍然没有最终处理异常,那么为什么程序不会中止?
答案 0 :(得分:0)
如果要使用pthread_cancel
取消线程,则线程必须正确管理其取消状态,仅在安全时启用异步取消,并在某些情况下检查是否已定期取消。 / p>
如果pthread_cancel
没有完全符合您的要求,请不要使用它。相反,请实现您自己的取消机制,该机制具有您所需的语义。