操作系统 livelock活锁

操作系统 livelock活锁

在本文中,您将了解操作系统中的活锁。

什么是活锁

活锁是指当一个对独占锁的请求被不断拒绝,因为多个重叠的共享锁不断干扰。进程的状态不断变化,阻止它们完成任务,并使它们更难完成任务。

当多个进程针对其他进程的变化重复执行相同的交互而没有执行任何有用的工作时,就会发生活锁。这些进程不处于等待状态,而是同时运行,与死锁不同,因为死锁的所有进程都处于等待状态。

活锁的例子

活锁的各种例子如下所示:

例子1

活锁的一个常见实例是,当两个人面对面在走廊里相遇时,两个人都会让对方先通过。他们最终一直在一边转到另一边,没有取得任何进展,因为他们同时朝着同一个方向移动。因此,他们无法相互穿过。

例子2

活锁的另一个实例是当两个进程需要两个资源,并且它们使用原始轮询进入注册表来获取所需的锁。如果第一次尝试失败,会尝试第二次。假设:

操作系统 livelock活锁

  1. 进程 A 持有 Y 资源
  2. 进程 B 持有 X 资源
  3. 进程 A 需要 X 资源
  4. 进程 B 需要 Y 资源

假设进程 A 首先运行并获取数据资源 X ,进程 B 其次运行并获取资源 Y ,无论哪个进程先运行都没有进展。尽管没有任何一个进程被阻塞,它们会持续使用CPU资源而没有任何进展,但也会停止任何处理阻塞。因此,这不是一个死锁,但你处于类似死锁的状态,即活锁。

导致活锁的原因是什么

当给定系统中允许的总进程必须由进程表中的条目数来定义时,就会发生活锁。因此,进程表槽应该被视为有限资源。如果由于表已满而导致分叉失败,分叉程序应在再次尝试之前等待一段随机时间。

以具有 100 个进程槽的UNIX系统为例。有 10 个程序正在运行,每个程序负责创建 12 个(子)进程。在每个进程创建 9 个新进程后,表已经被原始的 10 个进程和 90 个新进程耗尽。每个原始进程都陷入了无休止的分叉和失败循环中,这被称为死锁。虽然发生这种情况的机会很小,但是可能是可能的。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程