Linux之死锁与解决方式
更新时间:2024年02月12日 18:15:39 作者:风吹雨淋
这篇文章主要介绍了Linux之死锁与解决方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
死锁
死锁:指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。
死锁现象:
- 现象1,如果执行流加锁完毕后,不进行解锁则会造成死锁(上篇所述);
- 现象2,线程A获取了1锁,线程B获取了2锁,同时线程A还想获取2锁,线程B还想获取1锁
现象2模拟:
两个线程都处于阻塞状态
死锁的必要条件
只要产生死锁,这四个条件一定会出现
- 互斥:一个执行流获取互斥锁后,其它执行流不能再获取该锁
- 不可剥夺:A执行流拿着锁,未使用完之前不能被强行剥夺
- 循环等待:多个执行流拿着对方想要的锁,并且各执行流还去请求对方的锁
- 请求与保持:执行流本身使用着一把锁并不释放,还在请求别的锁
解决方案
使线程的加锁顺序一致
破坏环路等待条件
使用非阻塞锁,一旦线程发现请求的锁被使用,就去释放自己拥有的锁
在加锁前,将临界资源一次性分配给线程A再加锁
try锁:pthread_mutex_try
- 申请锁失败,错误码会返回
- 非阻塞锁,申请失败会立即返回
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
相关文章
如何在Linux中route add命令添加路由(Linux route)
route add命令是用于管理Linux操作系统网络路由,允许用户添加、删除或修改网络路由表中的条目,在Linux系统上添加静态路由,静态路由是手动配置的路由,它指定了数据包从一个网络到达另一个网络的路径,通过添加静态路由,可实现网络分段、转发和通信等2024-06-06解决“WARNINGThe remote SSH server rejected X11 forwardin
使用xshell连接服务器时,出现了“WARNING! The remote SSH server rejected X11 forwarding request.”,意思是“远程SSH服务器拒绝X11转发请求”,这篇文章主要介绍了解决“WARNINGThe remote SSH server rejected X11 forwarding request.“警告,需要的朋友可以参考下2022-08-08
最新评论