Pthread 互斥锁断言失败
Pthread mutex lock assertion fails
这几天我一直在努力解决这个问题,但似乎不是我的错。我不能 post 任何代码,因为它足够大。我会尽量解释清楚。
首先,它是一个 multithreaded server application
,它同时接收来自多个客户端的请求,并使用带有 AF_UNIX
套接字的主从(线程池)样式对其进行详细说明。
虽然它是 运行,但经常 return 这个错误:
[name]: ../nptl/pthread_mutex_lock.c:81: __pthread_mutex_lock: Assertion `mutex->__data.__owner == 0' failed.
我无法复制此错误或使用 valgrind 或 gdb 捕获它(我尝试了几次)。
我使用了几个用 PTHREAD_MUTEX_INITIALIZER
初始化的全局 pthread_mutex_t
并且我 从不 销毁它们。我很确定围绕这样的代码安全地锁定和解锁它们:
pthread_mutex_lock(&mutex);
- 如果出现问题,我必须从一个线程return:
pthread_mutex_unlock(&mutex);
和return (void*) -1;
- else : 用共享变量做事
pthread_mutex_unlock(&mutex);
我读到这可能是由 pthread_mutex_lock
文件中较低级别的竞争条件引起的,但我不确定。
顺便说一句,我会理解为什么这个断言会失败一般
这通常表示锁已以某种方式损坏。一种可能是您试图锁定一个从未初始化或已经被销毁且未重新初始化的锁。另一种可能性是其他一些代码在互斥锁上踩踏,可能是通过越界访问数组或在释放后访问一些内存。
这几天我一直在努力解决这个问题,但似乎不是我的错。我不能 post 任何代码,因为它足够大。我会尽量解释清楚。
首先,它是一个 multithreaded server application
,它同时接收来自多个客户端的请求,并使用带有 AF_UNIX
套接字的主从(线程池)样式对其进行详细说明。
虽然它是 运行,但经常 return 这个错误:
[name]: ../nptl/pthread_mutex_lock.c:81: __pthread_mutex_lock: Assertion `mutex->__data.__owner == 0' failed.
我无法复制此错误或使用 valgrind 或 gdb 捕获它(我尝试了几次)。
我使用了几个用 PTHREAD_MUTEX_INITIALIZER
初始化的全局 pthread_mutex_t
并且我 从不 销毁它们。我很确定围绕这样的代码安全地锁定和解锁它们:
pthread_mutex_lock(&mutex);
- 如果出现问题,我必须从一个线程return:
pthread_mutex_unlock(&mutex);
和return (void*) -1;
- else : 用共享变量做事
pthread_mutex_unlock(&mutex);
我读到这可能是由 pthread_mutex_lock
文件中较低级别的竞争条件引起的,但我不确定。
顺便说一句,我会理解为什么这个断言会失败一般
这通常表示锁已以某种方式损坏。一种可能是您试图锁定一个从未初始化或已经被销毁且未重新初始化的锁。另一种可能性是其他一些代码在互斥锁上踩踏,可能是通过越界访问数组或在释放后访问一些内存。