预防死锁 可以采用一次性请求所有资源来预防死锁( 三 )


(1)低层次的资源必须在进程请求分配髙层次的资源之前提前申请,这对于暂时不需使用的低层次资源来说,会因空闲等待而产生浪费 。
(2)各类设备的资源层次一经设定,便不能经常随意改动,这就限制了新类型设备的增加 。
(3)各资源的层次是按照大多数进程使用资源的顺序设置的 。对于资源使用与此层次相闪配的进程,资源能得到有效的利用,否则,资源的浪费现象将仍然存在 。
死锁原因和解决方法由于误操作(如:错误地使用压缩代理)或病毒感染等原因,硬盘有时会产生一种“硬盘死锁”故障 。所谓硬盘死锁,是指电脑在引导机器载入操作系统过程中,由于循环分配驱动器盘符,导致驱动器逻辑盘符用尽而使机器陷入死循环状态,较后使机器无***常启动操作系
硬盘死锁一旦发生,其故障现象是:只要故障硬盘安装到电脑中,就无法从硬盘、软驱启动操作系统 。即使把故障硬盘安装成从属IDE设备,同样会导致正常软硬盘无法引导机器 。这种硬盘的故障现象,其表象似乎比真正的物理故障盘还严重,其实这是一种纯软故障 。
但由于这种故障硬盘安装到电脑中后,正常盘也不能引导机器了,所以一般的解决方法是,使用 CMOS SETUP中的低级格式化功能对其进行低格 。然而用这种方法存在很多弊病 。
事实上解决这种故障的原理非常简单,即只要将硬盘上的主引导扇区的所有内容清为0,使这种硬盘如同新盘,就可以解决死锁问题 。问题是这种硬盘接入机器后,机器无法引导操作系统,所以不能使用在操作系统下运行某些刷新主引导扇区程序的方法来解决 。如何在未引导操作系统的情况下不低格硬盘解决死锁问题呢?
观察死锁硬盘的故障现象,不难看出这种故障是在引导操作系统的过程中产生的,如果能在分配驱动器盘符之前,把对硬盘引导扇区刷新的指令写入软系统盘的引导扇区,让BOIO程序执行这个特别的引导扇区,就可以达到目的 。
具体操作方法如下:
先取下带有循环死锁故障硬盘,准备一张系统软盘(带有DEBUG调试程序)和一张空白软盘,并将空白软盘格式化 。
避免死锁的方法有哪些?1、避免给一个锁嵌套上锁,在持有一个锁的时候,不要再给这个锁上锁 。如果使用多个锁,使用std::lock 。
2、在持有锁时,不要调用别人提供的函数,因为你不清楚别人的代码怎么实现的,不知道它是不是在使用锁 。
3、给多个锁上锁时,固定顺序 。如果在给多个所上锁,并且无法使用std::lock,较好的做法就是在每一个线程中,都按照同样的顺序 。
4、分层次来使用锁,把程序分成几个层次 。区分每个层次中使用的锁,当一个线程已经持有更低层次的锁时,不允许使用高层次的锁 。可以在程序运行时给不同的锁加上层次号,记录每个线程持有的锁 。
扩展资料:
解决方法
在系统中已经出现死锁后,应该及时检测到死锁的发生,并采取适当的措施来解除死锁 。
死锁预防 。
这是一种较简单和直观的事先预防的方法 。方法是通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或者几个,来预防发生死锁 。预防死锁是一种较易实现的方法,已被广泛使用 。但是由于所施加的限制条件往往太严格,可能会导致系统资源利用率和系统吞吐量降低 。
死锁避免 。
系统对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源;如果分配后系统可能发生死锁,则不予分配,否则予以分配 。这是一种保证系统不进入死锁状态的动态策略 。