产业气象站|写给大忙人看的死锁全详解( 二 )
上面显示了一个进程资源获取和释放的过程 , 但是一般情况下会存在多个资源同时获取锁的情景 , 这样该如何处理?如下所示
typedefintsemaphoresemaphoreaResourcesemaphorebResourcevoidprocessA(void){down(&aResource)down(&bResource)useAResource()useBResource()up(&aResource)up(&bResource)}
对于单个进程来说 , 并不需要加锁 , 因为不存在和这个进程的竞争条件 。 所以单进条件下程序能够完好运行 。
现在让我们考虑两个进程的情况 , A和B , 还存在两个资源 。 如下所示
typedefintsemaphoresemaphoreaResourcesemaphorebResourcevoidprocessA(void){down(&aResource)down(&bResource)useBothResource()up(&bResource)up(&aResource)}voidprocessB(void){down(&aResource)down(&bResource)useBothResource()up(&bResource)up(&aResource)}
在上述代码中 , 两个进程以相同的顺序访问资源 。 在这段代码中 , 一个进程在另一个进程之前获取资源 , 如果另外一个进程想在第一个进程释放之前获取资源 , 那么它会由于资源的加锁而阻塞 , 直到该资源可用为止 。
在下面这段代码中 , 有一些变化
typedefintsemaphoresemaphoreaResourcesemaphorebResourcevoidprocessA(void){down(&aResource)down(&bResource)useBothResource()up(&bResource)up(&aResource)}voidprocessB(void){down(&bResource)//变化的代码down(&aResource)//变化的代码useBothResource()up(&aResource)//变化的代码up(&bResource)//变化的代码}
这种情况就不同了 , 可能会发生同时获取两个资源并有效地阻塞另一个过程 , 直到完成为止 。 也就是说 , 可能会发生进程A获取资源A的同时进程B获取资源B的情况 。 然后每个进程在尝试获取另一个资源时被阻塞 。
在这里我们会发现一个简单的获取资源顺序的问题就会造成死锁 , 所以死锁是很容易发生的 , 所以下面我们就对死锁做一个详细的认识和介绍 。
死锁
如果要对死锁进行一个定义的话 , 下面的定义比较贴切
如果一组进程中的每个进程都在等待一个事件 , 而这个事件只能由该组中的另一个进程触发 , 这种情况会导致死锁 。
简单一点来表述一下 , 就是每个进程都在等待其他进程释放资源 , 而其他资源也在等待每个进程释放资源 , 这样没有进程抢先释放自己的资源 , 这种情况会产生死锁 , 所有进程都会无限的等待下去 。
换句话说 , 死锁进程结合中的每个进程都在等待另一个死锁进程已经占有的资源 。 但是由于所有进程都不能运行 , 它们之中任何一个资源都无法释放资源 , 所以没有一个进程可以被唤醒 。 这种死锁也被称为资源死锁(resourcedeadlock) 。 资源死锁是最常见的类型 , 但不是所有的类型 , 我们后面会介绍其他类型 , 我们先来介绍资源死锁
资源死锁的条件
针对我们上面的描述 , 资源死锁可能出现的情况主要有
互斥条件:每个资源都被分配给了一个进程或者资源是可用的
保持和等待条件:已经获取资源的进程被认为能够获取新的资源
不可抢占条件:分配给一个进程的资源不能强制的从其他进程抢占资源 , 它只能由占有它的进程显示释放
循环等待:死锁发生时 , 系统中一定有两个或者两个以上的进程组成一个循环 , 循环中的每个进程都在等待下一个进程释放的资源 。
发生死锁时 , 上面的情况必须同时会发生 。 如果其中任意一个条件不会成立 , 死锁就不会发生 。 可以通过破坏其中任意一个条件来破坏死锁 , 下面这些破坏条件就是我们探讨的重点
死锁模型
Holt在1972年提出对死锁进行建模 , 建模的标准如下:
推荐阅读
- 产业气象站|散热效果大大下降,CPU硅脂应该这样涂!涂多了得不偿失
- 【湖南】那些街边不起眼的小小打印店,背后却是鲜为人知的产业帝国
- 产业气象站|5G汽车:新能源汽车产业发展新方向
- 产业气象站|「电商运营」作为电商运营需要具备的逻辑思维
- 电子产业观察者|他才是人生大赢家,段永平:OPPO、vivo真正的幕后大老板
- 大宇说科技|斥资188亿,解决了芯片全产业链困局,中国最强芯片巨头诞生
- 自主汽车网|汽车产业生态将被重建,“软件定义的汽车”成为共识
- 科技小数据|产业观察:如何通俗地理解5G及其应用
- 产业气象站|重新审视和思考威胁情报的价值,从欧洲“超算”被黑事件
- 产业气象站|专家:直接烧掉!,人工智能会威胁到人类吗?若出现这些状况