Linux之死锁与解决方式

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

免费资源网 – https://freexyz.cn/

死锁

死锁:指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。

死锁现象:

现象1,如果执行流加锁完毕后,不进行解锁则会造成死锁(上篇所述);现象2,线程A获取了1锁,线程B获取了2锁,同时线程A还想获取2锁,线程B还想获取1锁

现象2模拟:

Linux之死锁与解决方式插图

Linux之死锁与解决方式插图1

两个线程都处于阻塞状态

死锁的必要条件

只要产生死锁,这四个条件一定会出现

互斥:一个执行流获取互斥锁后,其它执行流不能再获取该锁不可剥夺:A执行流拿着锁,未使用完之前不能被强行剥夺循环等待:多个执行流拿着对方想要的锁,并且各执行流还去请求对方的锁请求与保持:执行流本身使用着一把锁并不释放,还在请求别的锁

解决方案

使线程的加锁顺序一致

Linux之死锁与解决方式插图2

破坏环路等待条件

使用非阻塞锁,一旦线程发现请求的锁被使用,就去释放自己拥有的锁

Linux之死锁与解决方式插图3

在加锁前,将临界资源一次性分配给线程A再加锁

try锁:pthread_mutex_try

申请锁失败,错误码会返回非阻塞锁,申请失败会立即返回

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容