二元信号量或互斥锁

2025 年 5 月 26 日 | 阅读 5 分钟

引言

作为同步机制,二元信号量的整数值介于 0 和 1 之间。因此,这种信号量为关键区域提供了一个单一的访问点。这意味着关键组件一次只能由一个人访问。在本文中,我们将更详细地探讨操作系统中的二元信号量。

什么是操作系统二元信号量?

这些信号量变量的值为 0 或 1。每当进程请求资源时,wait() 函数就会被调用,将信号量的初始值从 1 更改为 0。当进程完成资源使用后调用 signal() 方法时,此信号量变量的值会增加到 1。当另一个进程希望访问同一资源且此时此信号量变量的结果为零时,它需要等待初始进程停止使用该资源。此方法可用于同步进程。

二元信号量的示例

以下是一个流程图,说明了实体访问由二元信号量控制的关键区域的正常过程。

Binary Semaphore or Mutex

二元信号量不仅同步对重要组件的访问,还实现了互斥。因此,可以防止关键区域中的竞态情况。尽管二元信号量提供互斥,但重要的是要记住它们与互斥锁不同。互斥锁是锁定机制,而信号量根据定义是信号系统。

互斥锁以这种方式实现互斥,允许访问重要的代码区域。二元信号量的目标是同步对关键组件的访问。因此,互斥锁的主要目标是互斥。因此,它是二元信号量同步架构的结果。

一般来说,当实体可用时,互斥锁有效地限制了关键区域。因此,即使没有实体,信号量也能够使关键区域不可访问。例如,当外部先决条件需要满足才能使实体进入关键区域时,可能会发生这种情况。

二元信号量的利用和实现

在计数信号量中,由于我们有需要同时在临界区执行的进程集,因此未提供互斥。

然而,二元信号量严格提供互斥。在这里,临界区中最多只能有一个进程,而不是有多个可用槽位。信号量只能有两个值,0 或 1。

让我们看看二元信号量的编程实现。

二元信号量的特点

  1. 当整数值介于 0 和 1 之间时,称为二元信号量。
  2. 它只是一个只有两种可能性的锁:0 和 1。其中 1 表示空闲,0 表示忙碌。
  3. 二元信号量的概念是,它通过允许一次只有一个进程进入临界区来使用共享资源。
  4. 当值为 0 时,函数或线程将在临界区中。由于它正在使用共享资源,其他线程或进程应该等待它完成。相反,当没有进程使用共享资源时,临界区是空闲的。
  5. 通过确保在同一时间没有两个函数在临界区中,它保证了相互排斥。
  6. 由于它只是一个保存整数值的变量,因此它不能保证有界等待。如果一个进程无法管理进入临界区的机会,它可能会饿死。我们不希望这种情况发生。

二元信号量的优点

  1. 当使用信号量时,只有一个过程可以进入关键部分。此过程的另一个名称是互斥原则。
  2. 信号量通常独立于机器,因此可以随时随地运行。

二元信号量的缺点

  1. 大量的信号 (V) 和等待 (P) 操作会导致执行滞后和性能下降。
  2. 它不总是满足进度、有界等待和互斥的要求。

常见问题

1. 什么是操作系统二元信号量?

作为同步设备,二元信号量的整数值介于 0 和 1 之间。这种信号量为关键区域提供了一个单一的访问点,只有一个人可以即时访问它。

2. 二元信号量有什么用途?

当需要互斥时,使用二元信号量。只允许一种方法通过进入临界区一次访问共享资产。

3. 二元信号量有什么特点?

当整数值介于 0 和 1 之间时,称为二元信号量。一次只允许一个过程进入临界区。通过确保没有两个进程同时在临界区中,可以保证相互排斥。

4. 二元信号量有什么好处?

二元信号量的主要优点是互斥执行,它只允许一个进程进入临界区。这些信号量可以在任何地方、任何时间执行。

5. 二元信号量有什么缺点?

二元信号量的缺点是互斥执行、有界等待、进度以及操作 P 和操作 V 的执行缓慢。


下一主题死锁介绍