打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
多线程之避免死锁
多线程之避免死锁

概念:死锁是指永久阻塞一组争用一组资源的线程。
导致死锁的最常见情况是自死锁或递归死锁。在自死锁或递归死锁中,线程尝试获取已被其持有的锁。递归死锁是在编程时很容易犯的错误。
另一种死锁的情况就是多个线程分别获取一部分资源,并且等待循环等待其他线程已经获取的资源。

避免死锁有一般的银行家算法,该算法假设每个客户有可能在没有得到最大资源的情况下也能工作。银行家算法对每一个请求进行检查,如果它会导致不安全状态,则不满足该请求,否则便满足。检查状态是否安全是看是否有足够的资源满足距最大需求最近的客户。

对于每个线程都需要得到最大资源才能工作的情况下,避免死锁有如下的一般编程实践:

(1)请勿尝试在可能会对性能造成不良影响的长时间操作(如 I/O)中持有锁;

(2)请勿在可能直接或间接递归调用自己的函数里持有锁;

(3)一般情况下,请先使用粗粒度锁定方法,确定瓶颈,并在必要时添加细粒度锁定来缓解瓶颈。大多数锁定都是短期持有,而且很少出现争用。因此,请仅修复测得争用的那些锁定;

(4)使用多个锁定时,通过确保所有线程都按相同的顺序获取锁定来避免死锁;

(5)在等待某个资源时,使用超时机制;

(6)在系统中使用一个定时检查死锁环的机制,如果发现死锁就让一个线程的资源释放掉(数据库好像就是用这种方式)。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
出现线程死锁缺陷一般有那些原因?该怎么解决?
多线程存在的问题
Java编程语言如何完善自己的缺点-Java频道-中国IT实验室
举例剖析线程死锁与饥饿的区别
锁无关的(Lock-Free)数据结构——在避免死锁的同时确保线程继续
多线程队列的算法优化 | Parallel Labs
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服