【软考】PV操作同步互斥

进程

在操作系统中,进程是占有资源的最小单位(线程可以访问其所在进程内的所有资源,但线程本身并不占有资源或仅仅占有一点必须资源),一个进程能有多个线程。

临界资源

指一次只能有一个进程在占用的资源、如现实中的衣服、一件衣服只能一个人在穿、比如一个硬盘、有两个进程对同一块区域进行写操作、数据不就一锅粥了么=
=

临界区

在一个进程占有临界资源的时候、别的进程不能占有、这是互斥、从进程占有资源到资源被释放、这一段代码就叫临界区。

临界区原则(有空即进-无空则等-有限等待-让权等待)

个人造词= =

  见缝插针:当无进程占用资源、进程可以占用进程(有限时间)

等一会:当有进程占用资源、其他进程就等着

 不等了:等了半天那货还不释放资源、饿死我了!不等了

 让你们进:进程不能占用此资源、应该释放处理机、让别的进程好占用

解决互斥

为了不让多个进程占用一个资源、每次只保证一个进程占用资源、有一个特别牛掰的人、发明了PV操作和信号量

信号量

信号量分公用信号量和私用信号量

公用信号:

所用进程公有、代表资源的可用数量、一般用S表示

私用信号量:

进程自己可用资源的数量

为什么要有公有信号量和私有信号量?

公有信号量≠私有信号量

有一个桌子、上面放着6个饭盒、女生带走饭盒(空)往里面放饭、男生拿走饭盒(有饭的)、墙上有快黑板、写着桌子上饭盒的数量、男生女生每拿走一个饭盒、都会改一些黑板上的数字、每个女生手机都会动态显示空饭盒的数量、每个男生的手机都会显示有饭的饭盒数量。

解:

进程:男生(消费者)、女生(生产者)

资源:饭盒

公有信号量:黑板上显示桌子上的饭盒数量(包含有饭和没饭的)

私有信号量:

男生手机上饭盒数量(有饭)

女生手机上饭盒数量(空饭盒)

解释:私有信号量是进程可占用的资源数、有饭的男生才能拿来吃、女生刚好相反、所以桌子上的饭盒、不是所有都能被男生进程占用(空的就不行)、不是所有都能被女生进程占用(有饭的就不行)、而黑板上写的是所有在桌子上的饭盒(包括有饭没饭)所以!公有信号量≠私有信号量

PV操作

PV操作是对信号量的操作

P是给信号量减1、V是给信号量+1

P操作的是自己的私有信号量、V是操作的别人的私有信号量、公有信号量每个进程的PV都能操作

PV操作是解决同步互斥问题的

PV操作是一对恋人、有P后面绝对跟着V

例子

我承认、我真的饿了……所以还是拿吃来举例吧……一会搞袋FBM再加个JD…………一想能吃到ZFBMJJD我就流口水…………

咱们继续说上面女生做饭、男生吃的例子、声明下、男生是一个抽象的说法、男生可以有多个、女生也是、当每一个男生的过程如下。

消费者

①改写自己手机上能拿盒饭的数量(其他男生手机上的数也会改)P操作-1

② 要改写黑板上盒饭的数量(桌子上的盒饭数量变了)P操作-1

③拿盒饭、纳尼!没盒饭了!那我在这等着吧(等待)

④吃完了、把空盒子放回去(释放资源)

⑤改写黑板上的数字 V操作+1

⑥改写女生手机上的空盒饭盒子数 V操作+1

女生的此处略……要不一会就饿死了我

由上面可知、男生只要关注自己的手机、就可知道可使用资源的数量、女生也如此、但是他们都很白痴、到了桌子那写完黑板、改完手机、才发现可用资源<0了、所以就在那等待喽……

PV操作过程

解释:

抱歉额、解释一下、饭盒是不能拿走、我犯了一个错误、为了真实性就不改上面的字了、饭盒应该是不能被拿走的、女生只能把做好的饭带过来放进饭盒、男生只能把饭拿走(甭管方法、手抓!)、当放饭和拿走饭的时候、算是占用饭盒!黑板上写的是没有被男生和女生占用的饭盒……这样看上面的图就懂了吧…………男生是拿走了之后不用盒子了、所以做了两个V操作、然后吃饭、画个图发现自己把自己撂里面了……

PV代码

(P方法和V方法、操作流程就不写了)

<span style="font-size:18px;">import java.util.concurrent.Semaphore;

/**
 * 抽象任务,具体的执行任务,归实现类负责
 *
 * @author Administrator
 *
 */
public abstract class Task {

	public abstract void run();

	private Semaphore s;

	private boolean hasExisted = false;

	public void P(final Semaphore s) throws InterruptedException {
		if (s == null) { // 申请空的信号量
			throw new InterruptedException("不能为空");
		}
		if (hasExisted) {// 已经申请了一个资源,还没有释放
			throw new InterruptedException("已经占用一个资源");
		}
		s.acquire();// 阻塞
		this.s = s;
		hasExisted = true;
	}

	public boolean V() {
		if (!hasExisted) {
			return false;// 没沾有资源就不能说释放了
		}
		s.release();//释放资源
		hasExisted = false;
		s = null;
		return true;
	}
}</span>

阻塞

是指消费者(男生)在消费的时候、S2<0的时候、S<0的时候、就会阻塞、因为是先减的、所以会为负数、就好像男生在排队、手机上和黑板上都会为 —3。

PV的问题

1 难度大、使用不当易引起死锁

2 效率底、如男生女生每次只能拿放一盒饭的饭

总结:

私有信号量其实就是进程本身能用的资源量、公有信号量其实就是个个进程未占用的资源数量、消费者的私有信号量+生产者的私有信号量=公有信号量、P操作表示申请一个资源、V操作表示释放一个资源、按照上面的说就是:

男:

我在拿饭的时候S=S-1(桌子上没被男女占用的饭盒减1)、S2=S2-1(因为把饭拿走了、男生能拿走饭的数量减1)

饭拿完了S=S+1(桌子上没被男女占用的饭盒+1)、S1=S1+1(女生能装饭的盒子+1)

女生:

放饭的时候 S=S-1(桌子上没被男女占用的饭盒减1)、S1=S1-1(因为把饭装满了、女生能装满的饭盒子数量减1)

饭放好了了S=S+1(桌子上没被男女占用的饭盒+1)、S2=S2+1(男生能吃的有饭的盒饭+1)

写了2个多小时=
=我去……2014年10月10日1:15:44

这句话没看懂吧!

我承认、我真的饿了……所以还是拿吃来举例吧……一会搞袋FBM再加个JD…………一想能吃到ZFBMJJD我就流口水…………

翻译

我承认、我真的饿了……所以还是拿吃来举例吧……一会搞袋 方便面 再加个鸡蛋…………一想能吃到 煮方便面加鸡蛋 我就流口水…………

——————————————吃饱睡觉(~﹃~)~zZ——————————————

——————————chenchen———————————

时间: 2024-10-25 08:24:56

【软考】PV操作同步互斥的相关文章

软考--操作系统知识--PV操作

1.任何两个并发进程之间存在着( D)的关系. A.各自完全独立 B.拥有共享变量 C.必须互斥 D.可能相互制约 2.并发进程执行的相对速度是(D ). A.由进程的程序结构决定的 B.由进程自己来控制的 C.在进程被创建时确定的 D.与进程调度策略有关的 3.并发进程执行时可能会出现"与时间有关的错误",这种错误是由于并发进程(A )引起的. A.使用共享资源 B.执行的顺序性 C.要求计算时间的长短 D.程序的长度 4.并发进程中与共享变量有关的程序段称为(B ). A.共享子程

软考之路--从生活着手,看PV如何操作

PV操作,是软考当中一个很重要的考点,一听到这个名词,顿时赶脚高大上有么有,在软考的历年试题中,也不乏PV操作的身影,老师也对PV操作进行了一次讲课,那时年少,听得稀里糊涂,也不是很理解,在小编的理解当中,PV操作与信号量的处理相关,P表示通过的意思,V表示释放的意思.做过几套软考试题,看过软考视频,对PV操作有了一点傻傻的理解,PV操作属于操作系统方面的知识,在前面的博文中,小编介绍过进程和存储,这篇博文,小编主要和大家来学习一下PV操作的相关知识,小编会循着下面这张图的脉络,一一介绍,首先,

软考复习——PV操作

 在操作系统中,进程之间经常会存在互斥(都需要共享独占性资源时)和同步(完成异步的两个进程的协作)两种关系.而信号量和PV操作完美有效的处理了这两种情况.     互斥:就好比过独木桥,一次只能执行一个进程.     同步:好比一个人骑车一个人步行,双方协作完成一件事情,速度快的每过一段时间就停下来等等速度慢的 信号量是一种特殊的变量,表现形式是一个整型S和一个队列,根据控制对象的不同被赋予不同的值.分为以下两类: 1,公用信号量.实现进程间的互斥,初值为1或资源的数目, 2,私用信号量.实

软考(2)-操作系统之PV操作

在操作系统中已经学过PV操作,一直懵懵懂懂的,这次软考又有操作系统的内容,对PV操作有了新的认识.PV操作是操作系统中的一个难点也是重点,只要理解了,也不是什么难题.接下来简单的介绍一下PV操作. 1)基本概念 为了解决进程间的同步与互斥问题,我们引入了PV操作.接下来理解一下同步与互斥及相关的概念: 临界资源:在进程中,一次只能供一个进程使用的资源,如打印机,磁带机等. 进程间的互斥:同一个资源,多个程序想要使用,但只有一个程序能够占用资源.如千军万马过独木桥. 进程间的同步:双方共同协作完成

软考之路--从生活着手,看PV怎样操作

PV操作.是软考其中一个非常重要的考点,一听到这个名词,顿时赶脚高大上有么有,在软考的历年试题中,也不乏PV操作的身影,老师也对PV操作进行了一次讲课,那时年少.听得稀里糊涂,也不是非常理解,在小编的理解其中,PV操作与信号量的处理相关.P表示通过的意思,V表示释放的意思.做过几套软考试题,看过软考视频,对PV操作有了一点傻傻的理解,PV操作属于操作系统方面的知识,在前面的博文中,小编介绍过进程和存储,这篇博文.小编主要和大家来学习一下PV操作的相关知识,小编会循着以下这张图的脉络,一一介绍,首

软考征程之Pv操作

一.概念 1.PV操作的含义 PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下: P(S):①将信号量S的值减1,即S=S-1: ②如果S30,则该进程继续执行:否则该进程置为等待状态,排入等待队列. V(S):①将信号量S的值加1,即S=S+1: ②如果S>0,则该进程继续执行:否则释放队列中第一个等待信号量的进程. PV操作的意义:我们用信号量及PV操作来实现进程的同步和互斥.PV操作属于进程的低级通信. 2.进程的同步和互斥 同步:指在并发进程之

PV操作——软考探究(五)

之前总结了和资源有关的银行家算法,随着学习的深入,对于资源的理解也有了更深的理解,此篇文章通过解决同步.异步问题的典型机制--PV操作来加深对资源的理解. P操作:申请一个资源.它是执行操作的前提,只有有了资源才可以执行操作.就和现实生活是一样的,只有有了资源才能够进行生产. V操作:释放一个资源.在执行完毕一个操作以后要将占用的资源释放掉,和银行家算法吻合, 同时发出信号. [例]两个相关联的进程A和B,他们共享一个缓冲器.进程A不断地读入数据,并送入缓冲器:进程B不断地从缓冲器中取出数据并加

软测试综述——PV操作

 在操作系统中,进程之间常常会存在相互排斥(都须要共享独占性资源时)和同步(完毕异步的两个进程的协作)两种关系.而信号量和PV操作完美有效的处理了这两种情况.     相互排斥:就好比过独木桥,一次仅仅能运行一个进程.     同步:好比一个人骑车一个人步行,两方协作完毕一件事情,速度快的每过一段时间就停下来等等速度慢的 信号量是一种特殊的变量.表现形式是一个整型S和一个队列,依据控制对象的不同被赋予不同的值.分为下面两类: 1,公用信号量.实现进程间的相互排斥,初值为1或资源的数目, 2,

转---秒杀多线程第十二篇 多线程同步内功心法——PV操作上

阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇一个经典的多线程同步问题> <秒杀多线程第五篇经典线程同步关键段CS> <秒杀多线程第六篇经典线程同步事件Event> <秒杀多线程第七篇经典线程同步互斥量Mutex> <秒杀多线程第八篇经典线程同步信号量Semaphore> <秒杀多线程第九篇经典线程同步总结关键段事件互斥量信号量> <秒杀多线程第十篇生产者消费者问题> <秒杀多线程第十一篇读者写者问题>