当前位置: 代码网 > 服务器>服务器>Linux > Linux之死锁与解决方式

Linux之死锁与解决方式

2024年05月18日 Linux 我要评论
死锁死锁:指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。死锁现象:现象1,如果执行流加锁完毕后,不进行解锁则会造成死锁(上篇所述);

死锁

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

死锁现象:

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

现象2模拟:

两个线程都处于阻塞状态

死锁的必要条件

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

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

解决方案

使线程的加锁顺序一致

破坏环路等待条件

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

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

try锁:pthread_mutex_try

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

总结

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com