c++ - 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
的大小。
谢谢。
解决方案
根据这份 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()
并在线程或进程运行时杀死它们。
推荐阅读
- inno-setup - Inno Setup 常量和参数
- python - 向下迭代熊猫系列,如果字符串的第一个位置不是“1”,则在第一次出现空间时拆分到新列
- ios - 使用 AVAssetExportSession 合并音频
- c# - .net core MVC - 在控制器中指定布局视图
- celery - 使用 CeleryExecutor Airflow 的 Cloudera Kerberos 身份验证错误
- html - 如何在响应式菜单显示超出菜单高度的下拉链接?
- android - 设置应用程序中用于标题和副标题的文本样式
- angular - 用于并排显示的命名路由器出口 - 带有子路由
- javascript - 我正在尝试为我的 google 表格编写我的第一个 JavaScript
- php - 将过滤器 body_class 添加到没有正文标记的 header.php