【问题标题】:How to deal with failure to destroy mutex in destructor如何处理在析构函数中破坏互斥锁失败
【发布时间】:2011-06-08 15:17:26
【问题描述】:

假设您在封装 pthread 互斥调用的互斥类中有以下析构函数:

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

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

【问题讨论】:

    标签: c++ pthreads mutex


    【解决方案1】:

    写入错误消息并调用 abort()。当不可能的事情似乎已经发生时,硬而明显的失败通常比继续愉快地继续更可取。

    【讨论】:

      【解决方案2】:

      我认为除了忽略它(可能会记录一条消息,尤其是当您收到 EBUSY 时,因为这可能表明您的程序中存在严重的逻辑错误)之外,您无能为力。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          在我看来,在这种情况下,唯一理智的追索权是 assert(3) - 出了严重的问题,所以必须有人调查......

          【讨论】:

            【解决方案5】:

            我建议使用运行时断言。如果它失败了,你就处于 posix 的未定义行为领域。

            【讨论】:

              【解决方案6】:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-11-07
                • 2022-11-11
                • 2017-11-21
                • 1970-01-01
                • 2012-06-06
                • 1970-01-01
                相关资源
                最近更新 更多