操作系统中信号量和监视器的区别


信号量监视器都是操作系统中进程同步工具。信号量和监视器允许不同的进程以互斥的方式使用共享资源,但它们彼此之间存在差异。信号量和监视器之间的基本区别在于,信号量是一个整数变量,而监视器是一个抽象数据类型。

阅读本文以了解更多关于信号量和监视器的信息,以及它们之间是如何不同的。

什么是信号量?

信号量是一种进程同步工具。它本质上是一个整数变量,用“S”表示。此变量“S”的初始化是通过赋值一个等于系统中存在的资源数量的数字来完成的。

有两个函数,wait()signal(),用于修改信号量“S”的值。wait()signal() 函数以不可分割的方式更改信号量“S”的值。这意味着,当一个进程正在更改信号量“S”的值时,另一个进程不能同时更改信号量的值。

在操作系统中,信号量分为两类:计数信号量二元信号量。在计数信号量中,信号量的值初始化为系统中存在的资源数量。另一方面,在二元信号量中,信号量“S”的值为“0”或“1”。

什么是监视器?

监视器也是一种进程同步工具。它是一种抽象数据类型,用于进程的高级同步。它被开发出来是为了克服在使用信号量进行进程同步时发生的定时错误。由于监视器是一种抽象数据类型,因此它包含共享数据变量。这些数据变量将由所有进程共享。因此,这允许进程以互斥的方式执行。

在监视器中,一次只能有一个进程处于活动状态。如果任何其他进程尝试访问监视器中的共享变量,它将被阻塞并排队等待访问数据。这是由监视器中的“条件变量”完成的。条件变量用于提供额外的同步机制。

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

操作系统中信号量和监视器的区别

下表突出显示了操作系统中信号量和监视器之间所有重要的区别:

序号 信号量 监视器
1. 它是一个整数变量。 它是一个抽象数据类型。
2. 此整数变量的值表示系统中可用的共享资源数量。 它包含共享变量。
3. 当任何进程访问共享资源时,它会在信号量上执行“等待”操作(使用 wait 方法)。 它还包含一组对共享变量进行操作的过程。
4. 当一个进程释放共享资源时,它会在信号量上执行“信号”操作(使用 signal 方法)。 当一个进程希望访问监视器中的共享变量时,它必须使用过程来执行此操作。
5. 它没有条件变量。 它有条件变量。

结论

信号量和监视器都是操作系统中的进程同步工具,但它们彼此之间存在很大差异,如上表所示。您应该注意到的最显著的区别是,信号量是一个整数变量,指示系统中可用的资源数量,而监视器是一个抽象数据类型,一次只允许一个进程执行。

更新于: 2022-12-21

8K+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告