7、什么是死锁,如何避免死锁?【高频】
(1)什么是死锁:
死锁 是指在两个或多个进程的执行时,每个进程都持有资源,并都在等待其他进程 释放 它所需的资源,如果此时所有的进程一直占有资源而不释放,就导致了死锁。
死锁只有同时满足 四个条件时才会发生:
-
互斥:也就是 这块资源 只能被一个进程获取
-
请求并保持:进程因为请求资源而阻塞了,同时它也不会释放自己的资源
-
不可剥夺:资源只能由持有者 自愿释放,不能强行剥夺
-
循环等待:即p1占有p2的资源,p2占有p3的资源,p3占有p1的资源,这样形成了一个等待环路
(2)如何避免死锁:
通过 破坏死锁的四个必要条件之一 来预防死锁。
- 其中最容易破坏的就是 循环等待 这个条件。我们可以让 多个线程约定好一定的顺序,所有线程都按照同一个顺序 加锁释放锁
- 破坏 请求并保持 这个条件,我们要求 进程因为请求资源而阻塞了,这时它必须会释放自己的资源,以后需要时再重新申请