问题
报错原因很明了,就是mutex互斥锁已经被destroy了,又被lock
一般是调用了析构函数进行destroy后,其它的线程还在调用使用了mutex的方法
解决方法
具体原因取决于代码是如何编写的,但大致可以从以下方面出发来考虑
一是调用了析构函数后,将被delete的指针置空,其它线程判断对象为空,则不会再调用该对象的方法
但这个方法只是减少报错触发的概率,在多线程情况下,即使是delete和置null两行代码之间,其它线程也可能再次访问对象
二是通过pthread_join等方法,等待所有使用到mutex的线程全部结束后,再执行destroy,虽然麻烦点,但这是正规做法,多线程情况下不能图省事,该做的工作还是要做
三就是线程方法的设计问题了,有些设计得不好的线程方法,在某些条件下,可能会进入死循环,即使调用了pthread_join方法,也会一直结束不了,所以必要时,死循环要配合pthread_cond一起使用,方便打破死循环,结束线程