死锁产生的原因和解决办法

死锁产生的原因和解决办法

ID:34477297

大小:85.67 KB

页数:3页

时间:2019-03-06

死锁产生的原因和解决办法_第1页
死锁产生的原因和解决办法_第2页
死锁产生的原因和解决办法_第3页
资源描述:

《死锁产生的原因和解决办法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、关于死锁产生的原因以及解决的办法死锁问题无法避免(当然包括数据争夺),只能尽可能地减小死锁的发生,死锁和数据争夺只能尽量避免一般来说,如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。另外死锁有4个必要条件(要发生缺一不可)     (1)互斥条件:一个资源每次只能被一个进程使用。  (2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。  (3)不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。  (4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。通过使用较好的资源分配算法,就可以

2、尽可能地破坏死锁的必要条件,从而尽可能地避免死锁。下列方法有助于最大限度地降低死锁:    1、按同一顺序访问对象。 如果所有并发事务按同一顺序访问对象,则发生死锁的可能性会降低。例如,如果两个并发事务获得 Supplier 表上的锁,然后获得 Part 表上的锁,则在其中一个事务完成之前,另一个事务被阻塞在 Supplier 表上。第一个事务提交或回滚后,第二个事务继续进行。不发生死锁。将存储过程用于所有的数据修改可以标准化访问对象的顺序      2、避免事务中的用户交互。  避免编写包含用户交互的事务,因为运行没有用户交互的批处理的速度要远远快于用户手动响应查询的速度,例如答复应用

3、程序请求参数的提示。例如,如果事务正在等待用户输入,而用户去吃午餐了或者甚至回家过周末了,则用户将此事务挂起使之不能完成。这样将降低系统的吞吐量,因为事务持有的任何锁只有在事务提交或回滚时才会释放。即使不出现死锁的情况,访问同一资源的其它事务也会被阻塞,等待该事务完成。   3、保持事务简短并在一个批处理中。  在同一数据库中并发执行多个需要长时间运行的事务时通常发生死锁。事务运行时间越长,其持有排它锁或更新锁的时间也就越长,从而堵塞了其它活动并可能导致死锁。保持事务在一个批处理中,可以最小化事务的网络通信往返量,减少完成事务可能的延迟并释放锁     4、使用低隔离级别。 确定事务是否

4、能在更低的隔离级别上运行。执行提交读允许事务读取另一个事务已读取(未修改)的数据,而不必等待第一个事务完成。使用较低的隔离级别(例如提交读)而不使用较高的隔离级别(例如可串行读)可以缩短持有共享锁的时间,从而降低了锁定争夺   5、使用绑定连接。  使用绑定连接使同一应用程序所打开的两个或多个连接可以相互合作。次级连接所获得的任何锁可以象由主连接获得的锁那样持有,反之亦然,因此不会相互阻塞。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。