【发布时间】:2021-10-11 22:18:21
【问题描述】:
我一直在编写一个 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 是数组的大小。
谢谢。
【问题讨论】:
-
您是使用应用程序还是编程应用程序?因为如果你只是一个用户,就联系开发者吧。
-
ESRCH 是“没有这样的进程”,所以可能持有互斥锁的线程死了。