【发布时间】:2010-11-09 11:55:07
【问题描述】:
我在基于 linux (arm) 的通信应用程序中在不可预知的时间遇到以下错误:
pthread_mutex_lock.c:82: __pthread_mutex_lock: Assertion `mutex->__data.__owner == 0' failed.
Google 找到了很多关于该错误的引用,但似乎与我的情况相关的信息很少。我想知道是否有人可以给我一些有关如何解决此错误的想法。有谁知道这个断言的常见原因?
提前致谢。
【问题讨论】:
-
在排除了所有其他可能性后,我决定投资一些 RTFM。看来我一直在以不受官方支持的方式使用互斥锁。当一个线程在等待一些外部刺激时,它会等待它的互斥体。当互斥锁被释放时,线程恢复活力,总是来自另一个线程。所以释放线程从不互斥锁的所有者。我更改了实现以使用条件变量。我还不知道这是否是我烦恼的原因。多年来,我一直(错误地)以这种方式使用互斥锁,直到现在都没有遇到任何问题。
-
难道
pthread_mutexes(和一般的互斥锁)没有记录,因此它们必须由锁定它们的同一线程解锁?它碰巧在其他平台上工作的事实是特定于实现而不是可移植的。 -
我认为这就是我在上面的评论中所说的。我的实现误用了互斥锁,所以我对其进行了更改以正确使用条件变量。剩下的就是确认这实际上是断断续续的断言背后的原因。
-
当我的互斥锁未正确初始化时,有时我会遇到同样的错误 --> 使用 pthread_mutex_init
标签: linux pthreads mutex assert glibc