Dav*_*sey 34 linux assert mutex glibc pthreads
我在基于linux的(arm)通信应用程序中在不可预测的时间遇到以下错误:
pthread_mutex_lock.c:82: __pthread_mutex_lock: Assertion `mutex->__data.__owner == 0' failed.
Run Code Online (Sandbox Code Playgroud)
谷歌出现了很多关于这个错误的引用,但很少有与我的情况相关的信息.我想知道是否有人可以给我一些关于如何解决此错误的想法.有谁知道这个断言的常见原因?
提前致谢.
Dav*_*sey 27
坚如磐石坚持4天.我在这个宣布胜利.答案是"愚蠢的用户错误"(见上面的评论).互斥锁只能由锁定它的线程解锁.谢谢你的支持.
尽管 OP 有他的答案,但我想我会分享我的问题,以防其他人遇到同样的问题。
请注意,断言__pthread_mutex_lock在解锁中而不是在解锁中。对我而言,这表明大多数其他遇到此问题的人并没有在与锁定它的线程不同的线程中解锁互斥锁;他们只是锁定一个已被破坏的互斥锁。
对我来说,我有一个类(我们称之为Foo),它向其他一些类(我们称之为Bar)注册了一个静态回调函数。回调被传递到一个引用,Foo并且偶尔会锁定/解锁一个属于Foo.
此问题发生在Foo实例销毁后,而Bar实例仍在使用回调。回调正在传递对不再存在的对象的引用,因此,正在垃圾内存上调用 __pthread_mutex_lock。
请注意,我使用的是 C++11std::mutex和std::lock_guard<std::mutex>,但是,由于我在 Linux 上,问题完全相同。
| 归档时间: |
|
| 查看次数: |
31805 次 |
| 最近记录: |