满意答案

sbx1901

2014.06.02

采纳率:41%    等级:9

已帮助:113人

//算法描述语言使用基于C语言的伪代码

//算法思想:根据楼主的要求“为防止数的丢失和重复取同一个数”可以看出,进程A、进程B、进程C三者之间应该是互斥的关系。那么问题所限定的使用信号量的方式来管理的潜藏意思,就是要利用PV

原语实现并发进程在资源争夺中有效互斥。

//而具体实现的目标是“防止数的丢失”和“重复取同一个数”。由于本人不才,只讨论单任务系统下的状况。

//“数的丢失”的情况主要是进程A产生了随即变量给F后,但在进程B或者进程C处理之前又获得处理机的使用权而覆盖了之前那个未被处理过的F中的数——进程A连续获得处理机的使用权,而进程B、进

程C无法获得处理机使用权;

//“重复取同一个数”的情况则与“数的丢失”刚好相反:进程B或者进程C处理已经处理过F中的数了,但由于进程B或者进程C又再获得了处理机使用权因而F中的同一个数又被处理了一次——处理机的

使用权一直在进程B或者进程C两者手上,而进程A无法获得处理机使用权。

//因此,只要让进程A、进程B、进程C都懂得“适时弃权”的话,那么上述的要求就自然达到。

//不才本人的想法是这样的:进程A、进程B、进程C可以视为两类进程:负责生成随机数的生成进程(进程A属此类),负责处理F的处理进程(进程B、进程C属此类)。在要求下的工作流程则应该是:生

成进程→处理进程→生成进程→处理进程→……因此,我的做法便是在在进程外另外开辟一个标志位来表示上一个处理过F的进程类型——如果下一个进入临界区的进程检查标志位后,发现上次处理F的

是同类型进程,那么它就自动放弃这次处理机使用权,进入就绪队列。

//缓冲器F由于每次只能接受一段代码的使用,各进程在使用F时互斥。因此F是临界区。

//设F的信号量名为resource,初始值为0。

//再设一用于标志上一次操作F的是否为A的标示位(也是临界区)wasA:当wasA为1时,表示上次操作F的是A;当wasA为0时,表示上次操作F的不是A,而是B或者C。其信号量名为lastOper,初始值为0。

//……其他与本算法无重要关系的代码……

//进程A的算法描述

void processA(usrStruct &F){

//尝试进入临界区F

P(resource);

//尝试进入临界区wasA

P(lastOper);

//上次F的处理不是由进程A操作的吧?

if( wasA == 0 ){

//上次F的处理不是由进程A操作的

//那么,生成随机数并赋值给F

//然后,修改wasA,提示下个获得临界区F的进程,它所读到的F是由进程A处理的

wasA = ~wasA;

}//上次F的处理是由进程A操作的话,为了防止F中变量的丢失(没有经由进程B或进程C的操作就被新的值覆盖了),放弃处理。

//离开临界区wasA

V(lastOper);

//离开临界区wasA

V(resource);

}

//进程B的算法描述

void processB(usrStruct &F){

//尝试进入临界区F

P(resource);

//尝试进入临界区wasA

P(lastOper);

//上次F的处理是由进程A操作的吧?

if( wasA == 1 ){

//上次F的处理是进程A操作的

//那么,F是5的倍数吧?

if( F%5 == 0 ){

//打印F值

//然后,修改wasA,提醒下个获得临界区F的进程,它所读到的F不是由进程A处理的

wasA = ~wasA;

}//F不是5的倍数的话,那么这个F不应该由本进程B处理,放弃处理

}//上次F的处理不是由进程A操作的话,那么该值已经被别的进程处理过,为了防止重复取同一个数(进程B和进程C没有等进程A生成新的随机数给F就一再地处理同一个F),放弃处理。

//离开临界区wasA

V(lastOper);

//离开临界区wasA

V(resource);

}

//进程C的算法描述

void processC(usrStruct &F){

//尝试进入临界区F

P(resource);

//尝试进入临界区wasA

P(lastOper);

//上次F的处理是由进程A操作的吧?

if( wasA == 1 ){

//上次F的处理是进程A操作的

//那么,F不是5的倍数吧?

if( F%5 != 0 ){

//打印F%5的值

//然后,修改wasA,提醒下个获得临界区F的进程,它所读到的F不是由进程A处理的

wasA = ~wasA;

}//F不是5的倍数的话,那么这个F不应该由本进程B处理,放弃处理

}//上次F的处理不是由进程A操作的话,那么该值已经被别的进程处理过,为了防止重复取同一个数(进程B和进程C没有等进程A生成新的随机数给F就一再地处理同一个F),放弃处理。

//离开临界区wasA

V(lastOper);

//离开临界区wasA

V(resource);

}

//希望能够帮到你。

00分享举报

计算机操作系统的pv是什么意思,计算机操作系统关于PV操作的一道题相关推荐

  1. 计算机操作系统的工作原理英文,计算机操作系统原理分析

    <计算机操作系统原理分析>是2014年清华大学出版社出版的图书,作者是丁善镜[1] . 书    名 计算机操作系统原理分析 作    者 丁善镜 ISBN 9787302284710定  ...

  2. 计算机休眠模式对cpu,笔记本计算机处于待机模式时,正常的CPU温度是多少?

    对于计算机故障,主要表现为硬件故障和软件故障. 检修笔记本电脑时,请尝试遵循以下步骤. 尽管笔记本电脑易于携带,但对工作环境有更高的要求. 笔记本计算机出现故障时,请首先观察周围的环境,以查看散热或湿 ...

  3. Betriebssystem I 操作系统课件 01. Evolution von Rechnersystemen 计算机操作系统的演变

    /**  *  * Betriebssystem I  *  * Vorlesungsfolien: Prof. Noelte, BTU Cottbus  *  * Uebersetzer: Li B ...

  4. 计算机操作系统还能这样玩?这一篇计算机操作系统的总结为你保驾护航(零风险、高质量、万字长文、建议收藏)

    操作系统目录 1.什么是操作系统 2.计算机操作系统的基本特征 2.1.并发 2.2.共享 2.3.虚拟 2.4.异步 3.操作系统的发展 4.OS的运行机制和体系结构 4.1.运行机制 4.1.1. ...

  5. 计算机操作系统中程序的功能是,计算机操作系统的功能和分类研究

    摘 要:计算机操作系统是一种系统的体系,是计算机运行的核心,同时它精确的掌管着计算机软件,资源硬件,精确的管理着计算机的各项工作,组织计算机工作的各个重要的流程.随着时代的发展和科技的日新月异,计算机 ...

  6. 计算机操作系统相关论文,计算机操作系统的基本功能及应用论文

    计算机操作系统的基本功能及应用论文 在平时的学习.工作中,大家都接触过论文吧,论文是讨论某种问题或研究某种问题的文章.那么问题来了,到底应如何写一篇优秀的论文呢?以下是小编收集整理的计算机操作系统的基 ...

  7. 我国自主研发的计算机操作系统是,浅谈我国自主研发计算机操作系统的重要性...

    龙源期刊网 http://doc.docsou.com 浅谈我国自主研发计算机操作系统的重要性作者:向思宇 来源:<新生代·上半月>2018年第12期 [摘要]:现如今知识产权的问题只被少 ...

  8. 计算机操作系统发展史论文,探讨计算机操作系统的发展论文(2)

    探讨计算机操作系统的发展论文篇二 <计算机操作系统的发展趋势探讨> [摘要]随着社会经济的发展以及科学技术的日新月异,计算机技术被广泛应用在各个领域中,计算机操作系统也得到了完善与发展.对 ...

  9. 读书笔记之计算机操作系统的启动——《操作系统真相还原》

    首先,致敬作者-郑刚!一个偶然机会看到了真本书,然后就学着别人的刻苦,利用了地铁上的时间看了本书的试读版.不得不说,作者的功力很深厚,通俗易懂,讲解的十分详细,纵使之前学习过操作系统,但是看了此书之后 ...

  10. 计算机安装操作系统的目的是什么,安装计算机操作系统.doc

    安装计算机操作系统 计算机科学与信息技术学院 实 验 报 告 学号:姓名: 班级:课程名称:计算机网路 实验名称:安装计算机操作系统实验性质:综合性实验 √设计性试验 验证性试验试验时间: 2010- ...

最新文章

  1. TensorFlow王位不保?ICLR投稿论文PyTorch出镜率快要反超了
  2. Pass NI Certification
  3. MySQL外键与外键关系说明(简单易懂)
  4. Python 技术篇-在cmd命令提示行里模拟动态下载进度条实例演示,cmd清除日志、打印动态内容方法
  5. Linux 查找redis进程命令:ps -ef | grep redis
  6. 字节跳动VQScore算法拿下ICME 2021“压缩UGC视频质量评估”比赛第一名
  7. Nginx的应用之安装配置
  8. 一些常用的命令整理(更新ing~)
  9. python 地理处理包:geopandas介绍
  10. Atitit.注解解析(1)---------词法分析 attilax总结 java .net
  11. Flex4 启动失败: 正在等待 Adobe Flash Player 连接调试器
  12. 代码合规性:开发人员使用Helix QAC的5大原因
  13. 【合天网安】利用sqlmap辅助手工注入
  14. Cannot format given Object as a Number
  15. 中国移动:4G流量不清零,可分享
  16. java通过调用鼠标模拟自动添加微信好友
  17. What?模电比数电难学?
  18. Datewhale组队学习——深度学习推荐系统(1)
  19. 移动端页面键盘弹出后导致body高度变低背景图片被挤上去解决方法
  20. css中元素横向放置,使用CSS将元素放置到右侧

热门文章

  1. day04-Testin云测平台操作
  2. Python的简单代码:两天肝出画函数图像(散点图)的程序(不用matplotlib)(含白菜也能看懂的超超超详细讲解和源代码哦)
  3. 中国移动的指令大全!(不再需要人工台)
  4. vmware-nat模式下网络模型
  5. 5.4 创建 WBS
  6. SQL Server numeric数据类型
  7. 安卓客户端微博登陆(文件不存在 C8998)
  8. 软件从业者不可不读的一本书
  9. (初阶版本)扫雷游戏(C语言)娱乐教程
  10. 路由器wan口ip地址_如何在没有浏览器的情况下查找外部或WAN IP地址?