C++ 异常和pthread_cancel混淆
c++ exceptions and pthread_cancel confusion
我的代码有一个pthread_cancel取消具有 try 块并捕获所有块的线程(catch (...))。
由于线程处于 try 块中并且线程被取消时的计时问题,我的程序被中止,因为 pthread NTPL 引发的异常不会被捕获所有块捕获,因此线程无法取消。
我查看了一些解决方案,我发现如果通过捕获异常重新抛出异常,则线程会正常取消。
我的问题是 - 即使我们捕获并重新抛出,仍然没有最终处理异常,那么为什么程序不中止?
如果要使用
pthread_cancel
取消线程,线程必须正确管理其取消状态,仅在安全的情况下启用异步取消,并且在某些情况下,检查是否已定期取消。
如果pthread_cancel
不能完全满足您的需求,请不要使用它。相反,实现您自己的取消机制,该机制恰好具有您需要的语义。
相关文章:
- 增量运算符与后缀混淆
- C++图形类指针混淆
- OpenCV C++.快速计算混淆矩阵
- 结构和双指针隐藏在其他结构中,多层混淆
- 混淆了如何使用IDL与Ethovision进行通信
- 关于 std::min, std::max 中的比较运算符的混淆
- 对单链表的混淆
- CMake - 模块 + 库混淆
- 与 for 循环中的变量混淆
- 与浅拷贝构造函数和深拷贝构造函数混淆
- 模板参数部分中有关包扩展的一些混淆
- NS3 插槽混淆(需要帮助理解)
- 与指针算术混淆
- write() 和 read() 中几乎没有混淆
- 与C++哈希表的基础知识混淆
- 混淆 Begin() 方法作为参数
- 编译器生成的默认构造函数具有 constexpr 混淆行为
- 重命名 win32api 函数以进行混淆
- 与 boost::locale 关于"ß"大写的例外行为混淆
- C++ 向量插入和迭代器混淆