有几天我试图超越这个问题,但似乎不是我的错。我无法发布任何代码,因为它足够大。我会尽力解释它。
首先是multithreaded server application
,它同时接收来自多个客户端的请求,并使用带有AF_UNIX
套接字的master-workers(线程池)样式进行详细说明。
在它运行时,它经常会返回此错误:
[name]:../ nptl / pthread_mutex_lock.c:81:__ pthread_mutex_lock:断言`mutex-> __ data .__ owner == 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_mutex_lock
文件中较低级别的竞争条件引起的,但我不确定。
顺便说一下,我会理解为什么这个断言可能会失败一般
答案 0 :(得分:3)
这通常表示锁已经以某种方式损坏。一种可能性是您正在尝试锁定一个从未初始化或已被销毁但未重新初始化的锁。另一种可能性是,其他一些代码会在互斥锁上踩踏,可能是通过访问数据超出范围或者在释放后访问某些内存。