什么是Livelock?
阿活锁是其中对于一个排他锁的请求被多次否认,因为许多重叠共享锁保持在相互干扰的情况。进程不断更改其状态,这进一步阻止了它们完成任务。这进一步阻止了他们完成任务。
ivelock最简单的例子是两个人在走廊上面对面见面,他们俩都移到一边让对方通过。他们最终在没有碰撞的情况下从一侧移到另一侧,因为它们当时以相同的方式移动。在这里,他们从未相遇。
范例2:
您可以在上图中看到,两个给定进程中的每个进程都需要两个资源,并且它们使用原始轮询输入注册表来尝试获取它们所需的锁。如果尝试失败,则该方法将再次起作用。
- 进程A保留Y资源
- 进程B拥有资源X
- 进程A需要X资源
- 流程B需要Y资源
假设,进程A首先运行并获取数据资源X,然后进程B运行并获取资源Y,无论哪个进程首先运行,都没有进一步的进展。
但是,这两个过程都没有被阻止。它们反复消耗CPU资源,没有任何进展,但也会停止任何处理块。
因此,这种情况不是死锁,因为没有单个进程被阻塞,但是我们面对的情况相当于死锁,即LIVELOCK。
什么导致了活锁?
当应通过进程表中的条目总数定义特定系统中允许的进程总数时,将发生Livelock。因此,过程表插槽应称为有限资源。
什么是死锁?
死锁是当任何进程进入等待状态时在OS中发生的情况,因为另一个等待进程正在保存所需的资源。死锁是多进程中的常
见问题,其中多个进程共享一种特定类型的互斥资源,称为软锁或软件。
什么是饥饿?
饥饿是所有低优先级进程都被阻止,高优先级进程继续进行的情况。在任何系统中,对高/低优先级资源的请求都是动态发生的。因此,需要一些政策来决定谁在何时获得支持。
使用某些算法,即使某些进程没有死锁,也可能无法获得所需的服务。当某些线程使共享资源长时间不可用时,就会发生饥饿。
饥饿的例子:
例如,一个对象提供了一种同步方法,可能需要很长时间才能返回。如果一个线程频繁使用此方法,则也需要频繁同步访问同一对象的其他线程将经常被阻塞。
死锁,饥饿和活动锁之间的区别
- 死锁是当任何进程进入等待状态时在OS中发生的情况,因为所需的资源由另一个等待进程持有。
- 另一方面,活动锁几乎与死锁相似,不同之处在于,活动锁中涉及的进程的状态始终保持彼此更改,没有进展。
- 因此,Livelock是资源匮乏的独特案例。
概要:
- 定义:Livelock是一种情况,在这种情况下,由于许多重叠的共享锁不断相互干扰,因此反复拒绝排他锁的请求。
- 当应由进程表中的条目总数定义特定系统中允许的进程总数时,将发生Livelock
- 死锁是当任何进程进入等待状态时在OS中发生的情况,因为另一个等待进程正在保存所需的资源。
- 现实世界中的示例是流量,它仅朝一个方向行驶。
- Livelock的一个示例是两个人在走廊上面对面见面,并且他们两个都走到一边让对方通过。
- 饥饿是所有低优先级进程都被阻止,高优先级进程继续进行的情况。