信号量机制与PV操作的理解

本文深入解析信号量机制,包括信号量的基本概念、类型及其在进程互斥与同步中的应用,如P、V操作处理,生产者-消费者问题的解决策略,帮助读者全面理解信号量在操作系统中的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 

基本概念

PV操作处理相关问题

正确理解信号量机制


基本概念

     信号量机制是一种有效的进程同步和互斥工具。信号量有整形信号量、记录型信号量、二进制信号量等。常用整型信号量实现PV操作。P操作表示申请一个资源,V操作表示释放一个资源。以下内容都指的整型信号量。

    信号量是一种特殊的变量,表现形式为一个整形S和一个队列。

    信号量根据控制对象的不同可以分为:

    (1)公用信号量。用于实现进程间互斥,初值为1或资源数。

    (2)私用信号量。用于实现进程间同步,初值为0或某正整数。

信号量取值意义:S≥0时,表示某资源可用数;S<0时,其绝对值表示阻塞队列中等待该资源的进程数。

P操作:S=S-1,若S≥0,进程继续执行;若S<0,进程暂停执行,进入等待队列。即执行P操作时,有可用资源则继续执行,无可用资源则等待。

V操作:S=S+1,若S>0,进程继续执行;若S≤0,唤醒等待队列中的一个进程。即执行V操作时,无等待进程则继续执行,有等待进程则唤醒该进程,然后本进程继续执行。

临界资源:一次仅允许一个进程使用的资源。多个进程必须互斥地对它进行访问。在硬件方面有打印机、传真机等,软件方面有变量、缓冲区等。

临界区:每个进程中访问临界资源的那一段代码。每次只允许一个进程进入临界区,进入后不允许其他进程进入。

PV操作处理相关问题

1.进程的互斥

        所谓进程的互斥,指当一个进程(线程)进入临界区使用临界资源时,需要使用临界资源的其他进程(线程)必须等待。退出临界区后,需要使用该临界资源的进程解除阻塞。互斥是进程(线程)之间的间接制约关系。

P(信号量)
  临界区
V(信号量)

      令信号量初值为1,进程进入临界区时执行P操作,信号量变为0,此时临界资源相当于被锁定,其他进程无法访问。然后执行V操作退出临界区,信号量变为1,临界资源得到释放,其他进程可以进行访问。

2.进程的同步

      进程同步是指为完成某种任务而建立的两个及两个以上的进程在某些位置上因工作次序的需要而等待、传递信息所产生的直接制约关系,这种制约关系源于他们之间的合作关系(依赖关系)。所以同步是一种更为复杂的互斥。也就是说,进程同步就是进程(线程)的运行必须严格按照某种先后次序来运行,从而完成的特定的任务。

      最简单的同步形式:进程A执行到L1时,依赖于进程B执行到L2时产生的数据。当进程A执行到L1时,如果进程B还未产生相应的数据,进程A只好等待进程B,只有进程B执行到L2计算出相应的结果后线程A在接着往下运行。

进程A         进程B
…             …
L1:P(信号量) L2:V(信号量)
…             …

      设置信号量初值为0,如果进程A先执行到L1,执行P操作后信号量小于0,A等待,知道B执行到L2执行V操作后信号量为0唤醒A继续执行。如果进程B先执行到L2(信号量+1)则进程A无需等待,直接就可以执行完。这样就实现了通过信号量控制进程的同步。

3.生产者-消费者问题

      生产者-消费者问题不仅要解决生产者进程与消费者进程的同步关系(生产者生产了产品,消费者才能取产品;消费者取走了产品,生产者才能继续生产),还要处理缓冲区的互斥关系。

      对于单缓冲区的生产者-消费者问题,可设置两个信号量S1、S2。S1初值为1,表示缓冲区空余空间(可存放产品个数),S2初值为0,表示缓冲区产品个数。生产产品需要占用缓冲区空间,消费产品需要缓冲区中的产品。这样就很好理解如下的PV操作了:

      P1进程生产一个产品后,需要判断缓冲区是否有空间(对S1执行P操作时S1需要大于等于0),如果有空间,则产品可以放入缓冲区;将产品送缓冲区,缓冲区产品数量增加1,需要对S2执行V操作。P2进程消费产品,先判断缓冲区中是否有产品(对S2执行P操作时,S2需要大于等于0),如果有产品,则可以从缓冲区中取产品;从缓冲区中取一个产品,缓冲区空间增加1,需要对S1执行V操作,然后消费者就可以消费了。

      当有多个生产者进程写入缓冲区、多个消费者进程读取缓冲区且每条消息只能读一次时,要考虑进程间的互斥关系,即同时只能有一个生产者向缓冲区写入一条消息,同时只能有一个消费者从缓冲区读取一条消息。互斥控制的要点在于判断出临界区的范围。

正确理解信号量机制

    可以从以下几个方面进行理解:

1.信号量与P、V操作是用来解决并发问题的,主要是互斥与同步两个关系。因此遇到问题首先从寻找互斥与同步关系开始。可以套用简单互斥、简单同步、生产者-消费者问题。

2.一般来讲,一个互斥或一个同步关系可以使用一个信号量来解决,要注意隐藏的同步关系。如生产者-消费者问题中,有两个同步关系,一个是判断是否还有足够的空间给生产者存放产品,另一个是判断是否有足够的产品让消费者使用。

3.信号量的初值通常表示资源可用数。而且对于初始为0的信号量,一般会先做V操作。

4.在资源使用之前,将会使用P操作;在资源用完之后,将会使用V操作。在互斥关系中P、V操作是在一个进程中成对出现的;而在同步关系中,则P、V操作一定是在两个进程甚至是多个进程中成对出现的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值