作者:Cyapirear 素材来源:华为开发者论坛 产生死锁的原因 当进程需要以独占的方式访问资源时,可能会发生死锁(Deadlock)。死锁是指两个或以上进程因竞争临界资源而造成的一种僵局,即一个进程等待一个已经被占用且永不释放的资源。若无外力作用,这些进程都无法向前推进。 产生死锁的根本原因 是系统能够提供的资源个数比要求该资源的进程数要少。 产生死锁的基本原因 可以分为两类:资源竞争和进程推进顺序不合理。 在资源竞争场景下,系统所拥有的资源是有限的,不能满足每个进程的需要。 例子: A有纸,B有笔 A:你不给我笔,我就写不了作业 B:你不给我纸,我就写不了作业 彼此僵持不下…… 多个程序同时运行时,进程推进顺序不合理。 例子: A要前进2步,到桌子前,再后退2步。 但如果执行顺序不合理:A先后退,就永远到不了桌子前,触发不了后续动作,就会死锁。 产生死锁的必要条件 产生死锁的四个必要条件: 互斥条件 涉及的资源是非共享的,即一次只能有一个进程使用。如果有另一个进程申请该资源,那么申请进程必须等待,直到该资源被释放。 不剥夺条件(非抢占) 进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自行释放。 占有并等待(部分分配) 进程每次申请它所需要的一部分资源。在等待一新资源的同时,进程继续占用已分配到的资源。 环路条件(循环等待)