博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oo第二次博客-三次电梯调度的总结与反思
阅读量:4977 次
发布时间:2019-06-12

本文共 843 字,大约阅读时间需要 2 分钟。

本单元从电梯调度相关问题层层深入,带领我们学习并运用了了多线程相关的知识。

三次电梯调度依次为单电梯单容量、单电梯可携带、多电梯可携带。

一.我的设计

在第一次作业中,使用了最简单的FIFO调度方法。设计思路大体如下:设计一个容器,在读入到新乘客请求时将之放入容器尾,容器非空时,电梯线程将在自己处于非载客状态时取出容器首元素进行工作,完成此次工作后,检查容器,非空继续工作,否则wait直到容器获得新乘客唤醒电梯或者输入结束从而结束线程。

 

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

 

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

二.bug与修复

前两次没有大问题,主要是算法完全按照指导书写性能不是很高,第三次因为前面提到的问题导致CPU时间炸了。

三.心得与体会

线程交互与安全如何兼得以及CPU时间保证(解决轮询)还需多加学习。

转载于:https://www.cnblogs.com/lzyckd1/p/10763134.html

你可能感兴趣的文章
Win CE 6.0 获取手持机GPS定位1----基础知识 (C#)
查看>>
Typora 自定义主题 修改左右间距
查看>>
Js循环绑定checkBox
查看>>
day20 Python 实现的广度优先搜索实现迷宫算法
查看>>
遍历树形结构的所有叶子节点中特定属性值,并且放入一个数组中
查看>>
新的开始
查看>>
go语言实战教程:Redis实战项目应用
查看>>
设计模式之Singleton
查看>>
你知道吗?洗发水也会让人变胖!
查看>>
Oracle数据表中的死锁情况解决方法
查看>>
Synchronized vs SyncRoot
查看>>
JDK8 下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html...
查看>>
face detection[SSH]
查看>>
【康托展开】
查看>>
DevExpress14.1.2 xe XE6 高速安装
查看>>
《设计模式》组合模式---伊利工厂
查看>>
跨浏览器的javascript事件的封装
查看>>
jQuery事件绑定和委托
查看>>
C++中string的访问方式
查看>>
CCTMXXMLParser
查看>>