Pthread互斥锁定断言失败

时间:2017-06-19 16:12:00

标签: c multithreading pthreads assert

有几天我试图超越这个问题,但似乎不是我的错。我无法发布任何代码,因为它足够大。我会尽力解释它。 首先是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而我从不销毁它们。我非常确定在代码周围安全地锁定和解锁它们:

  1. pthread_mutex_lock(&mutex);
  2. 如果某些内容失败并且我已经从帖子返回:pthread_mutex_unlock(&mutex);return (void*) -1;
  3. else:使用共享变量做事
  4. pthread_mutex_unlock(&mutex);
  5. 我已经读过它可能是由pthread_mutex_lock文件中较低级别的竞争条件引起的,但我不确定。 顺便说一下,我会理解为什么这个断言可能会失败一般

1 个答案:

答案 0 :(得分:3)

这通常表示锁已经以某种方式损坏。一种可能性是您正在尝试锁定一个从未初始化或已被销毁但未重新初始化的锁。另一种可能性是,其他一些代码会在互斥锁上踩踏,可能是通过访问数据超出范围或者在释放后访问某些内存。