如何处理在析构函数中破坏互斥锁的失败

时间:2011-06-08 15:17:26

标签: c++ pthreads mutex

假设您在mutex类中包含pthread互斥锁调用的以下析构函数:

~mutex()
{
    pthread_mutex_destroy(&m_mutex);
}

如果失败(返回非零),我们显然不会抛出异常。我们如何最好地处理这个问题?

6 个答案:

答案 0 :(得分:2)

编写错误消息并调用abort()。当可能发生不可能时,坚硬,明显的失败通常比继续快乐地好。

答案 1 :(得分:1)

我认为除了忽略它之外你可以做很多事情(可能记录一条消息,特别是如果你得到EBUSY,因为这可能表明程序中存在严重的逻辑错误。)

答案 2 :(得分:1)

你可以看看boost :: threads:如果你正在构建发布 - 不会检查返回代码,如果你是构建调试版本 - 将调用abort()并打印错误消息,BOOST_VERIFY是用户此

答案 3 :(得分:0)

在我看来,在这种情况下唯一合理的追索权是assert(3) - 出现了可怕的错误,所以有人要调查......

答案 4 :(得分:0)

我建议运行时断言。如果它失败了,你就处于posix的未定义行为的土地上。

答案 5 :(得分:0)

它在析构函数中的事实是无关紧要的。问题是如果破坏失败,你就无法恢复(忽略它除外)。无论您使用何种语言,情况总是如此。