我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:港彩神鹰 > 读入原语 >

【操作系统】PV 操作经典例题---三个进程之间的同步

归档日期:04-17       文本归类:读入原语      文章编辑:爱尚语录

  总共有 读入、执行、打印 三个进程,试用PV操作描述读入B1打印B2的同步过程。

  这个问题就是说了这样一件事:一个输入B1,被操作之后,成为B2,将B2打印。怎样用PV操作来说这件事。那么新的问题来了:啥是个PV操作?

  就拿这道题来解释PV操作吧,我想打印一个值,前提条件是这个值存在吧,如果不存在,那么打印这个动作就不应该被执行,不能说啥也没有在那瞎打印吧。那么怎样才能让它不执行呢?

  这就需要引入信号量机制了,当一个操作的信号量为负数的话,就会挂起等待,不执行。当一个操作的信号量为1或者大于1的时候,就可以执行。

  按理说,我有三个操作,读入(Reader)、执行(Executer)、打印(Printer),应该对应设置三个信号量R、E、P,对应PV操作流程如下图所示:

  如果这时候没有从Reader进程开始执行,而是试图执行Executer或者Printer进程,由于信号量E、P初始值都是0,而且一上来就是P操作,所以会使信号量E、P成为 -1,这样进程将会挂起等待,不执行。

  接着看,执行P(R),会使信号量R-1得0,执行输入B1操作,这时候B1已经被输入了,继续执行V(E)操作来唤醒Executer进程,再往下就是执行V(R)操作来再次唤醒读入进程。这就有Bug了,因为刚刚输入的B1还不一定被Executer进程处理了呢,就唤醒了下次的读入,这就有可能出现第二次的读入内容将第一次的读入内容覆盖,导致结果错误。

  为了避免这样的Bug发生,我们需要引入第四个信号量N,即Next输入信号量,并且初始化为0。

  现在总共就有四个信号量了,分别是输入信号量R=1,Next输入信号量N=0,B1存在信号量E=0,B2存在信号量P=0,对应PV操作流程如下图所示:

  当Reader进程执行到P(N)的时候,由于N的初始信号量为0,对N进行一次P操作,N-1 = -1,Reader进程将被挂起等待,无法继续执行。等到Executer进程执行完输出B2的时候,下一步执行V(N),对N进行一次V操作,N+1 = 0,Reader进程将被唤醒。这样,在将B1执行的结果B2输出之后,才允许第二次输入,可以避免因第二次输入覆盖第一次输入而导致结果错误的Bug。

  这里我再给出老师课堂上给出的答案,我个人认为两个版本的差别不是很大,所以这个就不再一步一步解释了:

  在课堂上我给出了我的解法思路,结果一下课问同学们理解不理解我的思路?结果是问一个一个不懂,很是郁闷。遂作此文。其实我觉得我那个版本还存在问题,但是由于是自己想出来的,思维定式,一时半会找不出来,希望看懂的同学给指点指点,定当感激。

  7、有时候方法简单一点,你就会忽略这实际上是一种方法;有时候方法复杂一点,多想几步,这个方法就上升成为一种策略了。

  8、我那时候的操作系统老师对我们讲:操作系统这门课你们现在学是学不懂的,等毕业你就懂了。

  11、为什么发射火箭都是倒着数数?倒着数会使人有紧迫感。总感觉数到0的时候需要做些什么。

  【解析】按照PV算法“五步曲”,将独木桥的两端分别标记为A和B;可解本题如下:第一步:找进程l 方向A到B的行人l 方向B到A的行人第二步:找动作(1).   方向A到B的行人的动作l 过独木桥(2)...博文来自:dreamshareTeam的专栏

  No1,进程同步的概念:        在多道程序环境下,并发执行的进程之间存在在不同的相互制约关系,forexample,计算1-1*1的式子,系统有会产生两个进程,一个是加法进程一个是乘法进程。但...博文来自:Best_love_ZY的博客

  有一座桥,有两个队伍(一个队伍要向东,一个队伍要向西),桥只允许一个队伍通过。如何用信号量解决这个问题。并用c/c++编写完整程序。论坛

  1.信号量机制信号量机制即利用pv操作来对信号量进行处理。什么是信号量?信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况有关。...博文来自:liudongdong_jlu

  问题描述模拟:父亲随机地剥橘子,削苹果,剥橘子要快些,削苹果要慢些,完成后放在盘子里,盘子只能容纳3颗水果。儿子只吃苹果,女儿吃橘子,儿子吃得快,女儿吃得慢。(假设他们都吃不饱)使用信号量机制,并用三...博文来自:CATCH A FIRE

  1.信号量基本术语      现代计算机系统中,多个进程可以并发执行,进程间必然存在共享资源和相互合作的问题。     同步主要是用户多个进程相互协作,共同完成任务,是进程间的直接制约问题;互斥则主要...博文来自:ogisasa的博客

  什么是临界区?每个进程中访问临界资源的那段程序称为临界区(临界资源是一次仅允许一个进程使用的共享资源)。每次只准许一个进程进入临界区,进入后不允许其他进程进入。一、锁机制:1、锁:在多线程编程中,操作...博文来自:qicheng777的博客

  1.信号量机制信号量机制即利用pv操作来对信号量进行处理。什么是信号量?信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况有关。...博文来自:祥哥的说

  1、设公共汽车上,司机和售票员的活动分别是:司机的活动:启动车辆;正常行车;2、请用信号量解决以下的“过独木桥”问题:同一方向的行人可连续过桥,当某一方3、有一阅览室,共有100个座位。为了很好利用它...博文来自:hunter_wyh

  进程同步的四种方法1、临界区(CriticalSection):通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。优点:保证在某一时刻只有一个线程能访问数据的简便办法缺点:虽然临...博文来自:wuhuagu_wuhuaguo的博客

  进程同步的四种方法1、临界区(CriticalSection):通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。优点:保证在某一时刻只有一个线程能访问数据的简便办法缺点:虽然...博文来自:zxx901221的专栏

  进程同步和通信进程同步在OS中引入进程后,一方面使系统的吞吐量和资源的利用率得到提升,另一方面也使得系统变得复杂,如果没有合理的方式对进程进行妥善的管理,必然会引起进程对系统资源的无序竞争,使系统变得...博文来自:知识必具有个性,才配说是自己的~

  多进程的系统中避免不了进程间的相互关系。本讲将介绍进程间的两种主要关系——同步与互斥,然后着重讲解解决进程同步的几种机制。      进程互斥是进程之间发生的一种间接性作用,一般是程序不希望的。通常的...博文来自:的博客

  一、临界区      互相协作的进程之间有共享的数据,于是这里就有一个并发情况下,如何确保有序操作这些数据、维护一致性的问题,即进程同步。为了解决合作进程之间的竞争条件,引入临界区问题模型。临界区是包...博文来自:一路前行

  进程间通信和同步在linux下有过种进程间通信的方法:半双工管道,FIFO(命名管道),消息队列,信号量,共享内存,socket等半双工管道管道式Linux系统中最古老的进程间通信机制,这里所说的管道...博文来自:soygrow的博客

  (1)信号量机制一个信号量只能置一次初值,以后只能对之进行p操作或v操作。 由此也可以看到,信号量机制必须有公共内存,不能用于分布式操作系统,这是它最大的弱点。 (2)自旋锁
旋锁是为了保护共享资源提...博文来自:魏波

  怎样同步多个线程或多个进程的活动。为允许在线程或进程间共享数据,同步是必需的。        互斥锁和条件变量是同步的基本组成部分。互斥锁和条件变量出自POSIX.1线程标准,它们总是可用来同步一个进...博文来自:

  说起进程的同步和异步,应该从进程的阻塞和挂起 1.阻塞和挂起区别 1)挂起是一种主动行为,因此恢复也应该主动完成,而阻塞是一种杯中行为,是在等待时间或者资源任务时的表现,我们也不知道什么时候阻塞什...博文来自:

  这两天看进程的同步与通信,看了几本书上的介绍,也从网上搜了很多资料,越看越迷惑,被这几个问题搞得很纠结。进程同步与互斥的区别?进程的同步方式有哪些?进程的通信方式有哪些?进程同步与通信的区别是什么?线...博文来自:

  定义又称,假脱机系统;在联机的情况下实现的同时外围操作的技术称为SPOOLing技术,或称为假脱机技术。组成1.输入井和输出井:输入井和输出井的存储区域是在磁盘上开辟出来的。输入输出井中的数据一般以文...博文来自:

  操作系统4————进程同步一.目录操作系统4————进程同步一.目录二.进程同步的基本概念1.同步机制的引入目的2.临界资源3.临界区4.两种形式的制约关系5.同步机制应遵循的规则三.软件同步机制1....博文来自:

  什么是临界区?每个进程中访问临界资源的那段程序称为临界区(临界资源是一次仅允许一个进程使用的共享资源)。每次只准许一个进程进入临界区,进入后不允许其他进程进入。进程间同步把异步环境下的一组并发进程因直...博文来自:

  进程同步则是一种直接的相互作用形式,这是合作进程之间一种有意识的行为,不仅不能避开,更要去妥善处理,否则谁也不知道会出现什么问题。...博文来自:

  多进程的系统中避免不了进程间的相互关系。本讲将介绍进程间的两种主要关系——同步与互斥,然后着重讲解解决进程同步的几种机制。      进程互斥是进程之间发生的一种间接性作用,一般是程序不希望的。通常的...博文来自:

  章强+原创作品转载请注明出处+《Linux内核分析》MOOC课程博文来自:

  1.进程互斥定义:由于操作系统各进程需要使用共享资源,而这些资源需要排他性使用,各进程之间竞争使用这些资源,这些关系称为进程互斥。如:一个文件的读写问题。一个文件在被读的时候,不能同时进行写的操作。临...博文来自:

  最近在准备推免的面试把王道的进程这一章拿出来做了一下,收获挺多的,写个文章总结下 2.3进程同步访问临界资源过程do{entrysection;//进入区设置访问临界区标志criticalsectio...博文来自:

  1、设公共汽车上,司机和售票员的活动分别是: 司机的活动:启动车辆;             正常行车;             到站停车; 售票员的活动: 关车门;             售票; ...博文来自:

  进程同步背景:多进程虽然提高了系统资源利用率和吞吐量,但是由于进程的异步性可能造成系统的混乱。进程同步的任务就是对多个相关进程在执行顺序上进行协调,使并发执行的多个进程之间可以有效的共享资源和相互合作...博文来自:

  第1章:计算机系统概论1、计算机系统由哪两部分组成?计算机系统性能取决于什么?   计算机系统是由“硬件”和“软件”组成。衡量一台计算机性能的优劣是根据多项技术指标综合确定的,既包括硬件的各种性能指标...博文来自:

  2.9进程同步的基本概念:临界资源、同步和互斥在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约关系。为了协调进程之间的相互制约关系,引入了进程同步的概念。临界资源虽然多个进程可以共...博文来自:

  1、进程之间的两种相互制约关系(1)间接相互制约关系(互斥关系)同处于一个系统中的进程,通常都共享着某种资源,如共享CPU、共享I/O设备等,所谓间接相互制约即源于这种资源共享,使系统中本来没有关系的...博文来自:

  阅读数 2119上一篇文章中我们从HotSpot的源码入手,介绍了Java的对象模型。这一篇文章在上一篇文章的基础上再来介绍一下Java的对象头。主要介绍一下对象头的作用,结构以及他和锁的关系。Java对象模型回顾与...

  阅读数 2万+卷积神经网络是深度学习的基础,但是学习CNN却不是那么简单,虽然网络上关于CNN的相关代码很多,比较经典的是tiny_cnn(C++)、DeepLearnToolbox(Matlab)等等,但通过C语...

  【深度剖析HMM(附Python代码)】1.前言及隐马尔科夫链HMM的背景

  阅读数 1万+1. 前言 隐马尔科夫HMM模型是一类重要的机器学习方法,其主要用于序列数据的分析,广泛应用于语音识别、文本翻译、序列预测、中文分词等多个领域。虽然近年来,由于RNN等深度学习方法的发展,HMM模型...

  阅读数 4万+小憩之后,继续为你解读AndFix热修复框架,呵呵。上一篇Alibaba-AndFix Bug热修复框架的使用已经介绍了AndFix的使用,这篇主要介绍AndFix原理以及源码解析。AndFix原理A...

  如何在ArcGIS Online中构建自己的应用程序模板初级篇-显示地图

  彻底解决MFC/C#中在控件上播放opencv的Mat类型帧视频-亲测满足实时性要求

  阅读数 1237做MFC+opencv项目时,对于我来说,将视频显示到相应控件上(static或者picture)这个问题一直存在,虽然之前写个一个帖子,介绍了一种将opencv的显示window贴到相应控件上的方法...

  阅读数 4万+0.绪论这篇文章主要为了研究双目立体视觉的最终目标——三维重建,系统的介绍了三维重建的整体步骤。双目立体视觉的整体流程包括:图像获取,摄像机标定,特征提取(稠密匹配中这一步可以省略),立体匹配,三维重...

  阅读数 26万+帐号相关流程注册范围 企业 政府 媒体 其他组织换句话讲就是不让个人开发者注册。 :)填写企业信息不能使用和之前的公众号账户相同的邮箱,也就是说小程序是和微信公众号一个层级的。填写公司机构信息,对公账...

  阅读数 2万+webService学习(二)—— 调用自定义对象参数 本文主要内容: 1、如何通过idea进行webService Client的简单实现(不再使用wsimport的方式,其实是ide帮我们做了...

  阅读数 3万+灰度图像的自动阈值分割(Otsu 法)机器视觉领域许多算法都要求先对图像进行二值化。这种二值化操作阈值的选取非常重要。阈值选取的不合适,可能得到的结果就毫无用处。今天就来讲讲一种自动计算阈值的方法。这...

  阅读数 20万+最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗! Docker的三大核心概念:镜像、容器、仓库 镜像:类似虚拟机的镜像、用俗话说就是安装文件。 容器:类似一个轻量...

  阅读数 44万+jquery/js实现一个网页同时调用多个倒计时(最新的) 最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦! //js ...

  阅读数 6万+局部异常因子算法-Local Outlier Factor(LOF)在数据挖掘方面,经常需要在做特征工程和模型训练之前对数据进行清洗,剔除无效数据和异常数据。异常检测也是数据挖掘的一个方向,用于反...

  阅读数 57万+强连通分量: 简言之 就是找环(每条边只走一次,两两可达) 孤立的一个点也是一个连通分量   使用tarjan算法 在嵌套的多个环中优先得到最大环( 最小环就是每个孤立点)   定义: int Ti...

  阅读数 3万+1. 基本概念     方向导数:是一个数;反映的是f(x,y)在P0点沿方向v的变化率。     偏导数:是多个数(每元有一个);是指多元函数沿坐标轴方向的方向导数,因此二元函数就有两个偏导数。  ...

  阅读数 3667结果分析(): 1.聚合报告 Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告”。今天再次有同行问到这个报告中的各项数据表示什么意思,...

  阅读数 12万+上一篇文章讲解了SNMP的基本架构,本篇文章将重点分析SNMP报文,并对不同版本(SNMPv1、v2c、v3)进行区别! 四、SNMP协议数据单元 在SNMP管理中,管理站(NMS)和代理(Age...

本文链接:http://chuyenchame.com/duruyuanyu/50.html