您当前的位置: 首页 >  c++

命运之手

暂无认证

  • 1浏览

    0关注

    747博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【C++】【pthread】pthread_mutex_lock called on a destroyed mutex

命运之手 发布时间:2021-07-12 09:45:28 ,浏览量:1

问题

报错原因很明了,就是mutex互斥锁已经被destroy了,又被lock

一般是调用了析构函数进行destroy后,其它的线程还在调用使用了mutex的方法

解决方法

具体原因取决于代码是如何编写的,但大致可以从以下方面出发来考虑

一是调用了析构函数后,将被delete的指针置空,其它线程判断对象为空,则不会再调用该对象的方法

但这个方法只是减少报错触发的概率,在多线程情况下,即使是delete和置null两行代码之间,其它线程也可能再次访问对象

二是通过pthread_join等方法,等待所有使用到mutex的线程全部结束后,再执行destroy,虽然麻烦点,但这是正规做法,多线程情况下不能图省事,该做的工作还是要做

三就是线程方法的设计问题了,有些设计得不好的线程方法,在某些条件下,可能会进入死循环,即使调用了pthread_join方法,也会一直结束不了,所以必要时,死循环要配合pthread_cond一起使用,方便打破死循环,结束线程

关注
打赏
1654938663
查看更多评论
立即登录/注册

微信扫码登录

0.0374s