请谈一谈,什么情况下会发生死锁?解决死锁的策略有哪些?

参考:https://www.nowcoder.com/tutorial/94/7c4c39f1191342d6bb6a088e3d76f661


一、请谈一谈,什么情况下会发生死锁?

(一)互斥条件:一个资源一次只能被一个进程访问。即某个资源在一段时间内只能由一个进程占有,不能同时被两个或两个以上的进程占 有。这种独占资源如CD-ROM驱动器,打印机等等,必须在占有该资源的进程主动释放它之后,其它进程才能占有该资源。这是由资源本身的属性所决定的。

(二)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。进程至少已经占有一个资源,但又申请新的资源;由于该资源已被另外进程占有,此时该进程阻塞;但是,它在等待新资源之时,仍继续占用已占有的资源。

(三)不剥夺条件:进程已经获得的资源,在未使用完之前不能强行剥夺,而只能由该资源的占有者进程自行释放。

(四)循环等待条件:若干资源形成一种头尾相接的循环等待资源关系。

二、解决死锁的策略有哪些?

  • 在程序运行之前预防发生死锁。破坏死锁发生的四个必要条件其中之一即可。
  • 在程序运行时避免发生死锁。银行家算法
  • 不试图阻止死锁,而是当检测到死锁发生时,采取措施进行恢复。通过杀死进程恢复

你可能感兴趣的:(面试题记录,JavaSE)