多线程之避免死锁(转载)
来源:互联网 发布:mac地址查询口令 编辑:程序博客网 时间:2024/05/22 06:44
概念:死锁是指永久阻塞一组争用一组资源的线程。
导致死锁的最常见情况是自死锁或递归死锁。在自死锁或递归死锁中,线程尝试获取已被其持有的锁。递归死锁是在编程时很容易犯的错误。
另一种死锁的情况就是多个线程分别获取一部分资源,并且等待循环等待其他线程已经获取的资源。
避免死锁有一般的银行家算法,该算法假设每个客户有可能在没有得到最大资源的情况下也能工作。银行家算法对每一个请求进行检查,如果它会导致不安全状态,则不满足该请求,否则便满足。检查状态是否安全是看是否有足够的资源满足距最大需求最近的客户。
对于每个线程都需要得到最大资源才能工作的情况下,避免死锁有如下的一般编程实践:
(1)请勿尝试在可能会对性能造成不良影响的长时间操作(如 I/O)中持有锁;
(2)请勿在可能直接或间接递归调用自己的函数里持有锁;
(3)一般情况下,请先使用粗粒度锁定方法,确定瓶颈,并在必要时添加细粒度锁定来缓解瓶颈。大多数锁定都是短期持有,而且很少出现争用。因此,请仅修复测得争用的那些锁定;
(4)使用多个锁定时,通过确保所有线程都按相同的顺序获取锁定来避免死锁;
(5)在等待某个资源时,使用超时机制;
(6)在系统中使用一个定时检查死锁环的机制,如果发现死锁就让一个线程的资源释放掉(数据库好像就是用这种方式)。
- 多线程之避免死锁(转载)
- 多线程的那点儿事(之避免死锁)
- 多线程的那点儿事(之避免死锁)
- 多线程的那点儿事(之避免死锁)
- 多线程的那点儿事(之避免死锁)
- 避免多线程死锁
- java多线程--避免死锁
- java多线程学习之死锁的模拟和避免
- 什么是多线程,锁,死锁,怎么避免死锁
- Linux多线程如何避免死锁
- 多线程操作哈希表避免死锁
- 如何避免多线程中死锁?
- java多线程如何避免死锁
- 避免死锁之银行家算法
- 避免死锁之银行家算法
- 避免死锁之银行家算法
- 并发编程之避免死锁
- Timer处理多线程并发,避免死锁
- VC-一个简单的DLL编写与调用
- CView转换成CScrollView
- 一个打破存在了几十年的目录树结构的划时代的产物--超级文件管理器(的想法)
- Silverlight使用LINQ、WCF访问SQL视图(转载于 银光中国)
- java读写文件大全
- 多线程之避免死锁(转载)
- Android权限说明
- ECSHOP本机快速部署安装教程
- domino代理运行过程中,在WEB页面上显示信息
- Android Widget添加自定义控件
- Server.MapPath()
- 关于软件测试中BUG的定义
- Hibernate优缺点
- 菜鸟笔记9——Camera扩充(5),保存图片至sdcard的实现