oo第二次博客-三次电梯调度的总结与反思
本单元从电梯调度相关问题层层深入,带领我们学习并运用了了多线程相关的知识。
三次电梯调度依次为单电梯单容量、单电梯可携带、多电梯可携带。
一.我的设计
在第一次作业中,使用了最简单的FIFO调度方法。设计思路大体如下:设计一个容器,在读入到新乘客请求时将之放入容器尾,容器非空时,电梯线程将在自己处于非载客状态时取出容器首元素进行工作,完成此次工作后,检查容器,非空继续工作,否则wait直到容器获得新乘客唤醒电梯或者输入结束从而结束线程。

在第二次作业中,一共有两个线程,分别为电梯线程与乘客申请线程(实际上就是读取输入的线程),在这里被轮询问题卡住过。我的设计思路整体与上一次相似,知识对于电梯的调度策略上,采用了指导书的方法,如果电梯内队列非空,优先处理电梯内第一个乘客的请求,否则载入在外面等待最久的乘客,在运行过程中如果有乘客可以进或者出则放行。这里只需要在没有当前读入且没有待处理的乘客时wait,有新读入时notify即可。

第三次作业中在复用第二次代码的基础上,将电梯线程扩展为了每个电梯一个线程,并进行了一些线程安全的考虑,遗憾的是最终因为轮询问题没能得到完全解决而没有得到好成绩。主要问题出现在本次代码的解决轮询机制最开始是复用了第二次的,但是会出现有的电梯尚在工作却被wait的情况,后来该换成了分别根据第二次的判定内容wait,但在强侧中好像有bug,另外我的调度算法大致思想是在必须换乘的乘客,先找到最近的换乘楼层然后安排电梯接送,但是在优化过程中似乎会有时间差问题使得当乘客换乘后原本准备接他的电梯已经离开而该乘客也没有回到等待队列从而出现bug。

二.bug与修复
前两次没有大问题,主要是算法完全按照指导书写性能不是很高,第三次因为前面提到的问题导致CPU时间炸了。
三.心得与体会
线程交互与安全如何兼得以及CPU时间保证(解决轮询)还需多加学习。
oo第二次博客-三次电梯调度的总结与反思的更多相关文章
- OO第二次博客作业——电梯调度
OO第二次博客作业——电梯调度 前言 最近三周,OO课程进入多线程学习阶段,主要通过三次电梯调度作业来学习.从单部电梯的傻瓜式调度到有性能要求的调度到多部电梯的调度,难度逐渐提升,对同学们的要求逐渐变 ...
- OO第二次博客作业—17373247
OO第二次博客作业 零.写在前面 OO第二单元宣告结束,在这个单元里自己算是真正对面向对象编程产生了比较深刻的理解,也认识到了一个合理的架构为编程带来的极大的便利. (挂三次评测分数 看出得分接近等差 ...
- OO第二次博客作业(第二单元总结)
在我开始写这次博客作业的时候,窗外响起了希望之花,由此联想到乘坐自己写的电梯FROM-3-TO--1下楼洗澡,然后······ 开个玩笑,这么辣鸡的电梯肯定不会投入实际使用的,何况只是一次作业.还是从 ...
- 2019年北航OO第二次博客总结
一.多线程电梯系列作业设计策略 1. 第一次作业——"FAFS傻瓜电梯" 第一次作业是先来先服务的"傻瓜电梯",我当时觉得这个设计未免太简单了,于是就在傻瓜电梯 ...
- OO第二次博客作业--第二单元总结
第一次作业 1. 设计策略 第一次作业,一共三个线程,主线程.输入线程和电梯线程,有一个共享对象--调度器(队列). 调度的策略大多集中到了电梯里,调度器反而只剩下一个队列. 2. 基于度量的分析 类 ...
- OO第二次博客
过去三周里,我们完成了多线程电梯的程序设计与构造.这是我第一次接触多线程编程.我感觉最大的困难在于多个线程中的操作,谁先谁后,不是像以前写的单线程程序那样严格确定,所以心里常常会比较慌.尤其是因为多线 ...
- OO第二单元博客
三次作业的设计策略 第一次作业 多线程协同控制 第一次作业只需要两个线程和一个公共缓冲区: 负责读取输入并把它添加进命令队列的线程,即生产者 负责从命令队列中取出命令执行的线程,即消费者 再加上一个缓 ...
- 渐入OO课的深处,探索多线程的秘密——OO第二次博客总结
一次又一次的挑战,一次又一次全新的知识,我来到了多线程的面前 第五次作业 1.度量分析 >第五次作业由于很大程度上调用的是前两次电梯的一些代码,所以存在的问题与前几次也十分相似.同时由于第一次使 ...
- oo第二次博客作业
多线程协同与同步控制总结 第五次作业-多线程电梯 本次作业是我第一次接触多线程,建立了请求模拟器.调度器和电梯运行三种线程.请求模拟器负责在输入后识别有效请求:调度器在扫描有效请求后将新的请求加入请求 ...
随机推荐
- IKEv2协议关键知识点总结整理
文章目录 @[toc] 1. IKEv2基本原理 2. IKEv2协议重点注意事项 2.1 情景一:==IKEv2协商密钥逻辑== ①密钥协商流程 ②函数调用关系 ③流程简述 2.2 情景二:==使用 ...
- 取消input默认提示框
input输入框有自动保存记忆功能,点击的时候之前输入的内容会在下拉框自动提示 autocomplete="off",这是H5的一个属性. <input type=" ...
- httpd通过ajp协议反向代理tomcat
外网服务器上启动tomcat. [root@VM_0_12_centos bin]# ./startup.sh Using CATALINA_BASE: /root/tomcat/apache-tom ...
- [源码解析] 深度学习分布式训练框架 horovod (21) --- 之如何恢复训练
[源码解析] 深度学习分布式训练框架 horovod (21) --- 之如何恢复训练 目录 [源码解析] 深度学习分布式训练框架 horovod (21) --- 之如何恢复训练 0x00 摘要 0 ...
- COS控制台进阶 - 文件预览和在线编辑
导语 | COS控制台新上线了文件预览功能,用户可在控制台内直接预览.编辑文件内容. 前不久,微软发布了 vscode for web 的公告,是基于web的在线代码编辑器,无需下载安装可以直接在we ...
- PHP中的PDO对象操作学习(一)初始化PDO及原始SQL语句操作
PDO 已经是 PHP 中操作数据库事实上的标准.包括现在的框架和各种类库,都是以 PDO 作为数据库的连接方式.基本上只有我们自己在写简单的测试代码或者小的功能时会使用 mysqli 来操作数据库. ...
- linux帐户安全管理与技巧
实验环境 CentosOS5.6试验台. 任务一:建立与删除普通用户账户,管理组 1)创建一个新用户user1 useradd user1 查看用户是否创建成功 2)创建一个新组group1 grou ...
- Python调用函数带括号和不带括号的区别
1.不带括号时,调用的是这个函数本身 ,是整个函数体,是一个函数对象,不需等该函数执行完成 2.带括号(此时必须传入需要的参数),调用的是函数的return结果,需要等待函数执行完成的结果 如果函数本 ...
- Java学习之随堂笔记系列——day03
内容回顾:1.标识符和类型转换 1.1 标识符:给类.方法.变量取得名字就是标识符. 命名规则: 1.必须是字母.数字._.$组成 2. ...
- HTML 网页开发、CSS 基础语法——十二.CSS选择器
选择器 基础选择器:标签选择器,id选择器,类选择器,通配符选择器 高级选择器:后代选择器,交集选择器,并集选择器 1. 标签选择器: • 优点:可以选中所有的同名标签,设置所有同名标签的公共样式. ...