首页 > 解决方案 > pthread_mutex_lock_full 断言失败错误

问题描述

我一直在编写一个 pthread 应用程序。应用程序具有由父线程跨线程共享的互斥锁。由于某种原因,它会引发以下错误:

../nptl/pthread_mutex_lock.c:428: __pthread_mutex_lock_full: Assertion `e != ESRCH || !robust' failed.

该应用程序用于使用基于方法捕获高速网络流量packet_mmap,其中有多个线程,每个线程都与一个套接字相关联。我不确定为什么会这样。它发生在测试期间,我无法一直重现该错误。我用谷歌搜索了很多,但我无法知道原因。谢谢你的帮助。

错误的原因是由于文件读取。当文件读取的行被注释时,错误不会发生。它发生在这一行:

fread(this->bit_array, sizeof(int), this->m , fp);

其中bit_array是一个动态分配的整数数组,是数组m的大小。

谢谢。

标签: c++cpthreadsmutex

解决方案


根据这份 GLIBC 的副本pthread_mutex_lock.c

    /* ESRCH can happen only for non-robust PI mutexes where
       the owner of the lock died.  */
    assert (INTERNAL_SYSCALL_ERRNO (e, __err) != ESRCH || !robust);

您的一个线程/进程在没有释放其所有锁定资源的情况下结束,或者您正在使用pthread_cancel()/kill()并在线程或进程运行时杀死它们。


推荐阅读