【问题标题】:What could cause application fail with SIGABRT on lock acquiring after fiew hours of work?什么可能导致应用程序在工作几个小时后获取锁时使用 SIGABRT 失败?
【发布时间】:2014-01-11 22:11:36
【问题描述】:

我想知道在几个小时的工作后可能导致应用程序在获取锁定时使用 SIGABRT 失败的一般问题是什么?

它主要发生在 std::lock_guard<std::mutex> lock(sync); 上的一个特定的类析构函数代码中

有时会发生在boost::mutex::scoped_lock lock(mutex); 上,即try catch(std::exception& e) 块内。

应用程序没有可检测到的内存泄漏。使用 Boost、ZeroMQ、HiRedis。代码库很大,所以我想知道我们应该寻找哪些主要内容?什么会导致这些问题(至少在理论上)?

【问题讨论】:

    标签: c++ multithreading boost c++11 zeromq


    【解决方案1】:

    锁定/解锁损坏的互斥锁? (即使用已删除的对象)可能大部分时间

    同一线程内的双重锁定?

    析构函数中的异常?

    静态的并行初始化?

    【讨论】:

    • 这就是问题所在 - 我们如何使用 scoped_lock 获得双锁?
    • @DuckQueen,递归调用。此方法直接或间接从此方法调用。
    猜你喜欢
    • 1970-01-01
    • 2012-01-27
    • 2018-03-16
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多