第五次作业--多线程电梯的总结与分析
1、策咯分析
由于上两次的电梯经验,这次虽然加大了难度,但是自己写的时候还好是比较有信心的,由于这次是多线程电梯在跑,为了模拟实际的运行情况,这次我舍弃了上两次队列思想,采用了模拟时间的方法,具体有三个电梯线程,一个总的调度线程,还有一个输入线程。由于多线程在同时运行,且输入线程与调度线程共用一个请求托盘。每个电梯和调度共享自己正在执行的指令序列。所以将总的指令序列和每个电梯的自己的运行序列作为锁,分别锁注可能产生冲突的代码块以实现线程同步。
2、类图总览
3、度量化分析
4、BUG分析
这次程序出现的bug真的是把自己都蠢哭了,DOWN拼写成了DOWM,输出无效指令的时候,忘记输出时间。在输出每个电梯的运行时间的时候,莫名其妙的一个输出位置多加了一个换行。这些错误都令人窒息,也十分感谢同学帮我找出这些小问题,程序思路设计好,核心写完,并不是真正的写完,能够按照给定的标准输出也是必不可少的。
第六次作业--文件系统
1、策略分析
看到这次题目的时候还很是挺开心的,因为终于不用写电梯了,跟室友讨论了一个晚上这次作业,发现这次作业还是非常简单的相对于上次的电梯,只需要每隔500ms扫描一下自己监控的文件目录,两个for循环,两个数组,新扫描的文件数组,和上次扫描的文件数组,按照指导书的压球比对这两次的信息,来判断有无触发,因为程序本身都是扫描,只有读取的操作,所以是线程安全的,又加上这次和室友一起学习了一些String 类的format 方法和字符串拼接,也不会出现线程运行时输出穿插的现象。所以这次的程序是线程安全的,所以写起来比较容易,运行效果自己的测试也比较正确。
2、类图总览
3、度量化分析
看来C语言对我的影响还是存在,一个函数总是想让他有更多的功能,导致不均衡。以后努力改正。
4、bug分析
由于莫名奇妙的原因,这次作业被无效了,我表示十分遗憾,不知道自己有没有更多的bug,但是我自己知道自己存在一个bug,因为我设计的时候,是一个请求一个线程,所以当一个文件被同时监控大小,名字,路径,触发时,分别有恢复,写入summary,写入detail时,会由于线程的问题,导致结果的不可预测,但都是可以合理解释的。其他的自己暂未发现。
第七次作业--出租车问题_1
1、策略分析
看到这次的作业,我第一反应就是一百个电梯???(被电梯毒害太深的孩子),不过自己仔细思考发现这次的作业跟电梯也确实有几分相似的地方,于是设计思路就立刻有了,请求线程,出租车线程,输入线程。请求线程一开始,就睡3000ms,让出租车去抢单,抢单抢到的出租车在3000ms后被请求筛选。由于出租车需要扫描请求队列,输入需要添加请求,所以就把请求队列把出租车的扫描与输入线程的读入锁起来。由于请求选中出租车时需要改变出租车的状态,所以选中哪个出租车就以哪个出租车为锁,锁住修改状态的部分。以便于实现线程的同步,保证线程的安全性。
2、类图总览
· 3、度量化分析
4、bug分析
这次没有被找到bug我还是比较意外的,因为上周要OS期中考试,所以为了复习这次自己的程序写的的确是有些仓促,不过基本的指令都还是可以跑的,每个出租车的运行轨迹我都单独输出一个文件里,虽说有一百多个文件,但是看起来还是十分清晰的。
心得与体会
通过这三次作业的编写与测试,自己也越来越看淡这门课的成绩了,只单纯的想从这门课训练下自己的技能。成绩并不能绝对的反映出自己这门课学的好坏,只要自己学到自己想学到的东西就好了。