c ++异常和pthread_cancel混淆

时间:2015-01-08 18:59:10

标签: c++ linux multithreading pthreads

我的代码有一个pthread_cancel取消一个有try块的线程并捕获所有块(catch(...))。

由于时间问题,当线程在try块中并且线程被取消时,我的程序被中止,因为pthread NTPL引发的异常不会被catch all block捕获,因为线程无法取消。

我查看了几个解决方案,我看到如果通过捕获异常重新抛出异常,则线程会正常取消。

我的问题是 - 即使我们抓住并重新抛出,仍然没有最终处理异常,那么为什么程序不会中止?

1 个答案:

答案 0 :(得分:0)

如果要使用pthread_cancel取消线程,则线程必须正确管理其取消状态,仅在安全时启用异步取消,并在某些情况下检查是否已定期取消。 / p>

如果pthread_cancel没有完全符合您的要求,请不要使用它。相反,请实现您自己的取消机制,该机制具有您所需的语义。