Pthread互斥锁断言失败
这几天我试图提前解决这个问题,但似乎不是我的错。我不能发布任何代码,因为它足够大。我会尽力更好地解释它。 首先它是一个multithreaded server application
,同时接收来自多个客户端的请求,并使用主线程(线程池)与AF_UNIX
套接字进行详细说明。 虽然它的运行往往导致这个错误:Pthread互斥锁断言失败
【名称】:../nptl/pthread_mutex_lock.c:81:__pthread_mutex_lock:断言`互斥 - > __数据.__所有者== 0' 失败。
我不能复制这个错误,或者用valgrind或gdb来捕获它(我试了几次)。 我用几个全球pthread_mutex_t
用PTHREAD_MUTEX_INITIALIZER
初始化,我用从来没有销毁它们。我敢肯定,以锁定和解锁安全身边这样的代码:
pthread_mutex_lock(&mutex);
- 如果事情失败,我已经从一个线程返回:
pthread_mutex_unlock(&mutex);
和return (void*) -1;
- 其他:做事与共享变量
pthread_mutex_unlock(&mutex);
我读过,它可以通过一个较低的水平的比赛条件引起文件,但我不确定。 顺便说一句,我会明白为什么这个断言可能会失败一般
回答:
这通常表明锁已成为以某种方式损坏。一种可能性是,您试图锁定一个从未初始化或已经被销毁但未重新初始化的锁。另一种可能是某些其他代码片段正在跺脚互斥,可能是通过访问数组越界或在释放后访问某些内存。
以上是 Pthread互斥锁断言失败 的全部内容, 来源链接: utcz.com/qa/257447.html