避免事务中的用户交互
避免编写包含用户交互的事务,因为运行没有用户交互的批处理的速度要远远快于用户手动响应查询的速度,例如答复应用程序请求参数的提示 。例如,如果事务正在等待用户输入,而用户去吃午餐了或者甚至回家过周末了,则用户将此事务挂起使之不能完成 。这样将降低系统的吞吐量,因为事务持有的任何锁只有在事务提交或回滚时才会释放 。即使不出现死锁的情况,访问同一资源的其它事务也会被阻塞,等待该事务完成 。
保持事务简短并在一个批处理中
在同一数据库中并发执行多个需要长时间运行的事务时通常发生死锁 。事务运行时间越长,其持有排它锁或更新锁的时间也就越长,从而堵塞了其它活动并可能导致死锁 。保持事务在一个批处理中,可以较小化事务的网络通信往返量,减少完成事务可能的延迟并释放锁 。
使用低隔离级别
确定事务是否能在更低的隔离级别上运行 。执行提交读允许事务读取另一个事务已读取(未修改)的数据,而不必等待排名个事务完成 。使用较低的隔离级别(例如提交读)而不使用较高的隔离级别(例如可串行读)可以缩短持有共享锁的时间,从而降低了锁定争夺 。
使用绑定连接
使用绑定连接使同一应用程序所打开的两个或多个连接可以相互合作 。次级连接所获得的任何锁可以象由主连接获得的锁那样持有,反之亦然,因此不会相互阻塞 。
文章插图
系统进程死锁的预防措施有什么预防死锁的根本办法就是要使死锁产生的4个必要条件之一不存在 。下面来分析一下破坏这些条件的可能性 。
破坏互斥条件
破坏互斥条件即允许多个进程同时访问资源 。由于多数资源的必须互斥访问这一固有特性不能改变,因此,死锁的预防通过破坏这个必要条件实现在很多场合是行不通的 。例如,打印机资源必须互斥使用,否则几个进程同时使用,每个进程各打印一行,这种输出信息的方式显然是不能被用户接受的 。
破坏占有和等待条件
采用资源静态分配法可破坏这一条件,该方法是指在进程运行前,一次性地_请分配它运行所需的全部资源 。若系统有足够的资源分配给某一进程,则一次性地将其所需资源分配给该进程,这样,在进程运行期间便不会再提出任何资源请求,从而使等待条件不成立 。如果分配时有一种资源要求不能满足,则进程需要的其他资源也先不分配给进程,从而避免进程在等待期间占用任何资源,破坏了占用条件,从而避免死锁的发生 。
该方法控制简单且容易实现,但由于进程运行期间对所需资源的全部占用,使得某些使用时间很短的资源被长时间占用,这样会严重影响系统资源的充分利用,导致资源利用率降低,同吋也影响到未获得全部资源的进程推迟运行 。
破坏不剥夺条件
采用剥夺式控制方法可以破坏该条件,该方法是使一个已保持了某些资源的进程,由于新的资源要求目前得不到满足,它必须先暂时释放巳保持的所有资源(一种剥夺式),然后去等待,以后再一起向系统提出巾请,这样也能防止死锁 。这种方法实现起来相对W难,为了保护进程自动放弃资源的现场以及后来的再次恢复,需要付出高昂的代价,并且这种方法只适用于处理机和存储器资源,对其他资源,此法不宜使用 。
破坏循环等待条件
采用资源顺序分配法可破坏该条件 。这种分配方法的基本思想是:把系统的全部资源分成多个层次,一个进程得到某一层的一个资源后,它只能再_请较高一层的资源;当一个进程要释放某层的一个资源时,必须先释放所占有的较高层的资源;当一个进程获得了某一层的一个资源后,它想再申请该层中的另一个资源,就必须先释放在该层中巳占有的资源 。或者说,进程释放资源的顺序是按照中请资源的相反顺序进行的 。这样可以预防循环等待现象的发生,因此不会发生死锁 。使用该方法要特别注意的问题是对资源所处层次的安排 。在通常情况下,把各进程经常用到的、比较普遍的资源安排在较低的层次上,把重要且相对匮乏的资源安排在较高的层次上,以便实现对各资源的较大限度的利用 。该方法相对于前面介绍的方法,在资源利用率和系统吞吐量上都有明显的改善 。但也存在一些缺陷 。
- 产妇月子薏仁饭的做法 产妇月子里可以吃薏米粥吗
- 如何预防老年人骨折 老年人骨折如何紧急处理
- 产妇能吃葱吗月子期间 产妇坐月子期间可以吃葱吗?
- 预防高血压的蔬菜水果 预防高血压的蔬菜水果有什么
- 预防针打错了会怎么样 宝宝预防针打错了会怎么样
- 女性个人护理可以用吗 女生需不需要经常用私护
- 女性更年期年龄及预防的简单介绍
- 广西中小学生预防溺水 广西学校安全教育平台预防溺水教育
- 机械伤害预防措施 机械伤害预防措施试题
- 预防针可以换地方打吗 预防针可以换地方打吗疫苗