【问题标题】:c++ exceptions and pthread_cancel confusionc++异常和pthread_cancel混淆
【发布时间】:2015-03-07 00:10:05
【问题描述】:

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

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

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

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

【问题讨论】:

标签: c++ linux multithreading pthreads


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2016-12-15
    • 1970-01-01
    • 2012-03-25
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    相关资源
    最近更新 更多