当前位置: 首页 > 编程笔记 >

监视器与信号量

令狐经武
2023-03-14
本文向大家介绍监视器与信号量,包括了监视器与信号量的使用技巧和注意事项,需要的朋友参考一下

监视器和信号灯用于进程同步,并允许进程使用互斥来访问共享资源。但是,监视器和信号灯包含许多差异。关于这两个的详细信息如下-

监控器

监视器是一种同步构造,旨在克服由信号量引起的问题,例如定时错误。

监视器是抽象数据类型,包含共享的数据变量和过程。共享数据变量不能由进程直接访问,并且需要过程才能允许单个进程一次访问共享数据变量。

证明如下:

monitor monitorName
{
   data variables;

   Procedure P1(....)
   {

   }

   Procedure P2(....)
   {

   }

   Procedure Pn(....)
   {

   }

   Initialization Code(....)
   {

   }
}

一次只能在一个监视器中激活一个进程。需要访问监视器中共享变量的其他进程必须排在队列中,并且仅在前一个进程释放共享变量时才提供访问权限。

信号量

信号量是一种信号传递机制,正在等待信号量的线程可以由另一个线程发出信号。这与互斥锁不同,因为互斥锁只能由调用等待功能的线程发出信号。

信号量使用两个原子操作,即等待和信号进行过程同步。

如果为正数,则等待操作会减小其参数S的值。如果S为负或零,则不执行任何操作。

wait(S)
{
   while (S<=0);

   S--;
}

信号运算会增加其参数S的值。

signal(S)
{
   S++;
}

信号量主要有两种类型,即计数信号量和二进制信号量。

计数信号量是整数值信号量,并且具有不受限制的值域。这些信号量用于协调资源访问,其中信号量计数是可用资源的数量。

二进制信号量就像对信号量进行计数一样,但它们的值限制为0和1。仅当信号量为1时,等待操作才有效;当信号量为0时,信号操作才成功。

 类似资料:
  • 本文向大家介绍如何使用信号量实现监视器?,包括了如何使用信号量实现监视器?的使用技巧和注意事项,需要的朋友参考一下 为了使用信号量实现监视器,为每个监视器提供了一个信号量互斥锁(已初始化为1)。Wait(mutex)必须在进入监视器之前由进程执行,并且必须在离开监视器之后执行signal(mutex)。由于信令过程必须等待,直到恢复的过程离开或等待,所以引入了另一个信号量(下一步),初始化为0。信

  • 我很难从操作系统概念的信号量方面理解监视器的实现 5.8.3使用信号量实现监视器 我们现在考虑使用信号量的监视器机制的可能实现。 对于每个监视器,都提供一个信号量互斥(初始化为1)。进程在进入监视器之前必须执行等待(互斥),在离开监视器之后必须执行信号(互斥)。 由于信令进程必须等待,直到恢复的进程离开或等待,因此引入了一个额外的信号量,,初始化为0。信令进程可以使用来挂起自己。还提供了一个整数变

  • 本文向大家介绍操作系统中的信号量和监视器之间的区别,包括了操作系统中的信号量和监视器之间的区别的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将了解操作系统中的信号量和监视器之间的区别- 信号 它是一个整数变量。 此整数变量的值表明系统中可用的共享资源的数量。 当任何进程有权访问共享资源时,它将对信号量执行“等待”操作(使用wait方法)。 当进程释放共享资源时,它将对信号量执行“信号”操

  • 这一节我们编写一个监视器:EventLogMonitor ,也就是用来接收事件的程序,用来代替 netcat 。EventLogMonitor 做下面事情: 接收 LogEventBroadcaster 广播的 UDP DatagramPacket 解码 LogEvent 消息 输出 LogEvent 消息 和之前一样,将实现自定义 ChannelHandler 的逻辑。图13.4描述了LogEv

  • (心跳配置) 完成基本配置后就可以部署、运行 Ceph 了。执行 ceph health 或 ceph -s 命令时,监视器会报告 Ceph 存储集群的当前状态。监视器通过让各 OSD 自己报告、并接收 OSD 关于邻居状态的报告来掌握集群动态。如果监视器没收到报告,或者它只收到集群的变更报告,那它就要更新集群运行图。 关于监视器与 OSD 的交互 Ceph 提供了合理的默认值,然而你可以覆盖它们

  • 监视电源状态的改变。 进程:主进程 在 app 模块发出 ready 事件之前, 您不能引用或者使用此模块。 例如: const electron = require('electron') const { app } = electron app.on('ready', () => { electron.powerMonitor.on('suspend', () => { conso