C++ 异常和pthread_cancel混淆

c++ exceptions and pthread_cancel confusion

本文关键字:cancel 混淆 pthread 异常 C++      更新时间:2023-10-16

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

由于线程处于 try 块中并且线程被取消时的计时问题,我的程序被中止,因为 pthread NTPL 引发的异常不会被捕获所有块捕获,因此线程无法取消。

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

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

如果要使用 pthread_cancel 取消线程,

线程必须正确管理其取消状态,仅在安全的情况下启用异步取消,并且在某些情况下,检查是否已定期取消。

如果pthread_cancel不能完全满足您的需求,请不要使用它。相反,实现您自己的取消机制,该机制恰好具有您需要的语义。