pthread_recursive_mutex-断言失败

问题描述 投票:0回答:1

我正在使用ROS(机器人操作系统)框架。如果您熟悉ROS,则在我的代码中,我没有使用活动服务器。主要使用发布者,订阅者和服务。不幸的是,我面临着pthread_recursive_mutex错误的问题。以下是错误及其回溯。

如果有人熟悉ROS堆栈,可以请您分享可能导致此运行时错误的潜在原因吗?

我可以提供有关运行时错误的更多信息。帮助非常感谢。谢谢

/usr/include/boost/thread/pthread/recursive_mutex.hpp:113: void boost::recursive_mutex::lock(): Assertion `!pthread_mutex_lock(&m)' failed.

enter image description here

boost pthreads ros recursive-mutex
1个回答
0
投票

lock方法实现仅声明pthread返回值:

    void lock()
    {
        BOOST_VERIFY(!posix::pthread_mutex_lock(&m));
    }

这意味着根据文档,或者:

  • EAGAIN)无法获取互斥,因为最大数量为互斥量的递归锁已被超出。

    这将表明您的锁存在某种不平衡(不是此呼叫站点,因为unique_lock<>确保不会发生这种情况),或者只是使所有等待同一锁的线程处于机架状态

    ] >
  • EOWNERDEAD)互斥锁是一个健壮的互斥锁,并且包含持有互斥锁时,先前拥有的线程终止。互斥量锁应由调用线程获取,并且取决于新线程所有者以使状态保持一致。

  • Boost不处理这种情况,只是断言。如果您所有的线程都使用线程安全锁防护(scoped_lockunique_lockshared_locklock_guard),则也不太可能发生这种情况。但是,如果您在某处手动使用lock()(和unlock())功能并且没有unlock() ing

    而退出线程,则可能会发生这种情况。

    [还有其他一些方式(尤其是经过检查)互斥可能会失败,但不适用于boost::recursive_mutex

© www.soinside.com 2019 - 2024. All rights reserved.