1.PV操作与信号量

转载于:https://www.jianshu.com/p/6674400a98b2

什么是信号量? 信号量是一个特殊的变量。

信号量的作用: 用于进程间传递信息的一个整数值。
信号量的定义:

struct semaphore {
    intcount;
    queueType  queue;
}

这是一个结构体,由一个值和一个队列组成。值是传递的信息(一个整数),而队列是允许进程挂在队列上的。
信号量的声明:semaphore s
对信号量可以实施的操作:初始化、P和V(P、V分别是荷兰语的test(proberen)和increment(verhogen))。
信号量类似于现实中的信号灯。红灯停绿灯行。

P操作主要做2件事情:

1.给信号量值减1
2.判断值是否小于0,如果值小于0,那么调用P操作的进程的状态就变成阻塞状态,并且把进程送到相应的等待队列的末尾,cpu重新调度。
如果值不小于0,那么实施P操作的进程继续执行。

V操作:

1.给信号量值加1
2.判断值是否小于等于0,如果小于等于0,那么就唤醒信号量队列上等待的一个进程,将其状态改变为就绪状态,并插入就绪队列。

P即down,semWait。
V即up,semSignal。


PV概念图

吃苹果问题java示例代码

问题描述:桌上有一只盘子,最多可以容纳两个水果,每次只能放入或取出一个水果。爸爸专向盘中放苹果(apple),妈妈专向盘中放橘子(orange),两个儿子专等吃盘中的橘子,两个女儿专等吃盘中的苹果。请用P、V操作或管程来实现爸爸、妈妈、儿子、女儿之间的同步和互斥关系。

import java.util.concurrent.Semaphore;

public class Plate {
    private Semaphore apple = new Semaphore(0);
    private Semaphore orange = new Semaphore(0);
    private Semaphore mutex = new Semaphore(2);

    public void dadPutApple() throws InterruptedException {
        mutex.acquire();
        apple.release();
        mutex.release();
    }

    public void momPutOrange() throws InterruptedException {
        mutex.acquire();
        orange.release();
        mutex.release();
    }

    public void sonEatOrange() throws InterruptedException {
        orange.acquire();
        mutex.acquire();
        mutex.release();
    }

    public void daughterEatApple() throws InterruptedException {
        apple.acquire();
        mutex.acquire();
        mutex.release();
    }
}

软考例题

进程P1、P2、P3、P4和P5的前趋图如图所示:


前趋图

若用PV操作控制进程P1、P2、P3、P4 、P5并发执行的过程,则需要设置5个信号量S1、S2、S3、S4和S5,且信号量S1~S5的初值都等于零。图2中a、b 和c处应分别填写 (1);d和e处应分别填写 (2),f和g处应分别填写 (3)

图2

(1)
A. V(S1)、P(S1)和V(S2)V(S3)
B. P(S1)、V (S1)和V(S2)V(S3)
C. V(S1)、V(S2)和P(S1)V(S3)
D. P(S1)、V(S2)和V(S1)V(S3)
(2)
A. V(S2)和P(S4)
B. P(S2)和V(S4)
C. P(S2)和P(S4)
D. V(S2)和V(S4)
(3)
A. P(S3)和V(S4)V(S5)
B. V(S3)和P(S4)P(S5)
C. P(S3)和P(S4)P(S5)
D. V(S3)和V(S4)V(S5)
解题过程
前趋图中节点之间连线根据左上到右下的顺序标注信号量(S1、S2、S3...),根据前驱图制作下表,再按照题目要求查表就行,进程顶部区域查前驱列,进程底部区域查后继列
表1

答案:A / B / C

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 信号量无论是大部分的教材上的信号量,还是博客中的信号量,基本上解说都是类似下面这种,给出几个不同的信号量种类然后加...
    梧叶已秋声阅读 13,412评论 1 6
  • 今天操作系统上完了一章,讲了几个经典的进程同步问题及其变形,代码阅读理解十分烧脑,课上反应不过来课下再细看,尽量将...
    良月廿七阅读 13,168评论 0 5
  • 进程的三种状态 进程通常分为就绪、运行和阻塞三个工作状态。三种状态在某些条件下可以转换,三者之间的转换关系如下: ...
    奋斗中的边牧哥哥阅读 12,861评论 0 10
  • 一、概述 信号量是操作系统提供的一种协调共享资源访问的方法。和用软件实现的同步比较,软件同步是平等线程间的的一种同...
    JaJIng阅读 9,245评论 1 3
  • 信号量 在并发系统中,信号量是用于控制公共资源访问权限的 变量。信号量用于解决临界区问题,使得多任务环境下,进程能...
    银靛阅读 5,505评论 0 1

友情链接更多精彩内容