Livelock:什么是示例,与死锁的区别

什么是Livelock?

活锁是其中对于一个排他锁的请求被多次否认,因为许多重叠共享锁保持在相互干扰的情况。进程不断更改其状态,这进一步阻止了它们完成任务。这进一步阻止了他们完成任务。

ivelock最简单的例子是两个人在走廊上面对面见面,他们俩都移到一边让对方通过。他们最终在没有碰撞的情况下从一侧移到另一侧,因为它们当时以相同的方式移动。在这里,他们从未相遇。

范例2:

您可以在上图中看到,两个给定进程中的每个进程都需要两个资源,并且它们使用原始轮询输入注册表来尝试获取它们所需的锁。如果尝试失败,则该方法将再次起作用。

  1. 进程A保留Y资源
  2. 进程B拥有资源X
  3. 进程A需要X资源
  4. 流程B需要Y资源

假设,进程A首先运行并获取数据资源X,然后进程B运行并获取资源Y,无论哪个进程首先运行,都没有进一步的进展。

但是,这两个过程都没有被阻止。它们反复消耗CPU资源,没有任何进展,但也会停止任何处理块。

因此,这种情况不是死锁,因为没有单个进程被阻塞,但是我们面对的情况相当于死锁,即LIVELOCK。

什么导致了活锁?

当应通过进程表中的条目总数定义特定系统中允许的进程总数时,将发生Livelock。因此,过程表插槽应称为有限资源。

什么是死锁?

死锁是当任何进程进入等待状态时在OS中发生的情况,因为另一个等待进程正在保存所需的资源。死锁是多进程中的常

见问题,其中多个进程共享一种特定类型的互斥资源,称为软锁或软件。

什么是饥饿?

饥饿是所有低优先级进程都被阻止,高优先级进程继续进行的情况。在任何系统中,对高/低优先级资源的请求都是动态发生的。因此,需要一些政策来决定谁在何时获得支持。

使用某些算法,即使某些进程没有死锁,也可能无法获得所需的服务。当某些线程使共享资源长时间不可用时,就会发生饥饿。

饥饿的例子:

例如,一个对象提供了一种同步方法,可能需要很长时间才能返回。如果一个线程频繁使用此方法,则也需要频繁同步访问同一对象的其他线程将经常被阻塞。

死锁,饥饿和活动锁之间的区别

  • 死锁是当任何进程进入等待状态时在OS中发生的情况,因为所需的资源由另一个等待进程持有。
  • 另一方面,活动锁几乎与死锁相似,不同之处在于,活动锁中涉及的进程的状态始终保持彼此更改,没有进展。
  • 因此,Livelock是资源匮乏的独特案例。

概要:

  • 定义:Livelock是一种情况,在这种情况下,由于许多重叠的共享锁不断相互干扰,因此反复拒绝排他锁的请求。
  • 当应由进程表中的条目总数定义特定系统中允许的进程总数时,将发生Livelock
  • 死锁是当任何进程进入等待状态时在OS中发生的情况,因为另一个等待进程正在保存所需的资源。
  • 现实世界中的示例是流量,它仅朝一个方向行驶。
  • Livelock的一个示例是两个人在走廊上面对面见面,并且他们两个都走到一边让对方通过。
  • 饥饿是所有低优先级进程都被阻止,高优先级进程继续进行的情况。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁