多线程协同与同步控制总结

  • 第五次作业-多线程电梯

  本次作业是我第一次接触多线程,建立了请求模拟器、调度器和电梯运行三种线程。请求模拟器负责在输入后识别有效请求;调度器在扫描有效请求后将新的请求加入请求队列,并扫描三部电梯的信息,最后遍历请求队列中的请求进行调度,并根据得到的信息进行请求状态和请求队列的更新;电梯运行线程则根据得到的信息进行运动,同时改编电梯信息。实现多线程功能中最大的挑战是实现共享数据的安全、避免冲突(一开始没有加synchronized修饰符导致出现很多bug),因此在与同学讨论后,采用了将所有方法都加上synchronized修饰符的方法来避免数据冲突(当然这样也一定会导致一些bug)。

  • 第六次作业-IFTTT

第六次作业是文件及文件夹的监控与管理。遵循“将每一个新的监控变成一个新的线程”的原则,很多个线程不断的扫描,如果有满足监控条件的触发情况,则完成触发,同时更新快照以便下一次判断。考虑到file的不安全性,设置线程安全的safefile类,并对于所有方法都上锁。

  • 第七次作业-出租车系统

本次作业的线程主要分为三类:出租车、调度器、输入。首先是100个出租车线程,考虑到安全问题,对于其中的快照信息进行加锁。其次是调度器线程,通过扫描得到出租车的快照,然后遍历请求对列,判断出租车是否符合规定的信息,得到最后的信息后则更新出租车及队列的状态。输入线程则循环接受输入,检查有效与同质信息并输出指定信息。队列及请求类的所有方法都上锁以确保线程安全。

度量分析 (由于eclipse原因,暂时无法度量分析)

  • 第一次作业·多线程电梯

  类图:

  

  自我点评:

  第二次作业·IFTTT

  类图:

  

  第三次作业·出租车系统

  类图:

  

  

BUG分析

  • 第一次作业·多线程电梯

  公测&互测:对方未进行测试

  调试:由于是第一次写多线程,所以导致没有思路,迟迟没有开工,一开始忘记加锁导致出现许多难以预料的问题。最终对线程进行加锁处理,实现了信息的相互传递,才得以顺利完成。

  测试程序:本次作业分配到的作业为无效作业,输入任何请求都显示输出格式错误。

  • 第二次作业·IFTTT

  公测:关于目录下的一系列测试没有通过

互测:无

分析:本次作业是自己对于指导书的理解不够透彻,在关于目录的一些操作都会报错而不是按照要求进行移动。

  测试程序:本次测试任务有非常多的bug,对于一般的请求都会报错和crash,难以进行测试。但对于某些简单样例能够通过。

  • 第三次作业·出租车系统

  公测:全部通过

  互测:对于输入的不合理请求没能报错,反而导致了crash。最终分析是由于正则表达式没有写好的原因(暴打自己狗头一万遍)。

  调试:测试太麻烦,没有进行很好的测试,所以才会出现低级错误。据可爱的助教说,我的程序出现了gui会跳的问题,所以之后应该会进行改动。

  测试程序:本次测试任务总体来说还算可以,但是对于出租车的抢单没有处理好,导致在多个出租车抢单时没能选择信用值最高的那个,而且也没有输出位置信息。

心得体会

这三次作业的难度比起前几次可谓难度上了一层楼,前几次大概还在“1+1=2”,这几次就到了求导,写第五次作业时完全没有思路,急的嘴角都攒起了泡,不过最后还是有惊无险,同舍友一起渡劫。由于对方没有给我公测和互测,对于我第五次作业的bug也没有一个很好的认识。但就自己之后的调试和反思,第五次作业程序代码太过冗杂而无法修改,形成了牵一发而动全身的状态,这是自己之前没有写好导致的。第六次作业是自己认为最难的一次作业,指导书的难以理解度已经超出了我的想象,所以也导致了不理解下的很多bug。

纵观这三次作业,难就难在不好调试,第五次作业还好,输出信息一目了然,但第六次作业对于深度和广度的遍历实在是太痛苦了,本人又没有扎实的c语言功底,只能自己手动构建文件夹,真是不堪回首的一段记忆……至于第七次作业那就更是玄学了,出租车肆意乱跑,也就胡乱调试了一下……

黑眼圈已经重到媲美眼影的程度,还好有假期能休息一下23333好好阅读指导书,阅读指导书的日子让我不由想起了传说中的甲方的种种要求啊!总体来说,苟活下来就是胜利。

oo第二次博客作业的更多相关文章

  1. OO第二次博客作业——电梯调度

    OO第二次博客作业——电梯调度 前言 最近三周,OO课程进入多线程学习阶段,主要通过三次电梯调度作业来学习.从单部电梯的傻瓜式调度到有性能要求的调度到多部电梯的调度,难度逐渐提升,对同学们的要求逐渐变 ...

  2. OO第二次博客作业—17373247

    OO第二次博客作业 零.写在前面 OO第二单元宣告结束,在这个单元里自己算是真正对面向对象编程产生了比较深刻的理解,也认识到了一个合理的架构为编程带来的极大的便利. (挂三次评测分数 看出得分接近等差 ...

  3. OO第二次博客作业(第二单元总结)

    在我开始写这次博客作业的时候,窗外响起了希望之花,由此联想到乘坐自己写的电梯FROM-3-TO--1下楼洗澡,然后······ 开个玩笑,这么辣鸡的电梯肯定不会投入实际使用的,何况只是一次作业.还是从 ...

  4. OO第二次博客作业--第二单元总结

    第一次作业 1. 设计策略 第一次作业,一共三个线程,主线程.输入线程和电梯线程,有一个共享对象--调度器(队列). 调度的策略大多集中到了电梯里,调度器反而只剩下一个队列. 2. 基于度量的分析 类 ...

  5. [BUAA OO]第二次博客作业

    第五次作业 这次作业是电梯系列作业的终极版,要求是使用多线程实现三部电梯的运行.这次作业的难点在于第一次运用多线程技术,对于线程中的行为并不了解,以及电梯功能的实现(如果之前作业采取的是扫描指令队列预 ...

  6. Java第二次博客作业

    Java第二次博客作业 时间过的很快啊,在不知不觉中这门课程的学习也就快要过去一半了,现在就来总结一下在这个第二个月的学习当中存在的问题以及得到的心得. 1.前言 第四次题目集和第五次题目集给我的感觉 ...

  7. 第二周博客作业 <西北师范大学| 周安伟>

    一,本周助教小结 逐步开始适应助教工作,对学生发布的博客进行点评,查看学生对软件工程前期的准备情况. 二,助教本人博客 https://home.cnblogs.com/u/zaw-315/ 三,学生 ...

  8. C语言第二次博客作业---分支结构

    一,PTA实验作业 题目1.计算分段函数 本题目要求计算下列分段函数f(x)的值: 1.实验代码 double x,result; scanf("%lf",&x); if( ...

  9. C语言第二次博客作业——分支结构

    一.PTA实验作业 题目1:计算分段函数 1.实验代码 #include<stdio.h> #include<math.h> int main(void) { double x ...

随机推荐

  1. 4.QPixmap,QTransform,绘图函数的使用

     新建一个项目Painter MyWidget.h #ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> class MyW ...

  2. 安卓自定义View实现钟表

    转载请注明出处:http://blog.csdn.net/baiyuliang2013/article/details/45535227 之前实现过html5版的钟表,html5也有一个画板属性Can ...

  3. 1026. Table Tennis (30)

    题目如下: A table tennis club has N tables available to the public. The tables are numbered from 1 to N. ...

  4. (NO.00005)iOS实现炸弹人游戏(五):游戏数据的初始化(二)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们现在来依次看一下上篇中提到的各个方法,首先介绍的是updat ...

  5. 听说你又一次放弃了Dagger2,来听老夫说道说道

    关于Dagger2是啥,用法网上已经有很多了.不过听说你已经很多次Dagger2从入门到放弃了,来来,让我这个老中医给你治一治.老夫手法纯熟,不会让你有任何痛苦的,放心读下去吧. 本文同步自 博主的私 ...

  6. 【IOS 开发】Object - C 数组使用详解

    . 一. 一维数组 1. 一维数组定义 (1) 数组定义 数组定义格式 : type arrayName[len]; -- 默认初始化 : 注意 数组定以后, 如果是 int 数组默认初始化为 0, ...

  7. NSData 与 struct 以及XML的转换。

    在做OC与C++ 混编的时候,我们可能会用到struct 与NSData的相互转换.在这里做一个记录 1.struct转换为NSData 例如如下的struct: struct tagPackageH ...

  8. css3学习之旅-css的基本语法(1)

    后面就将要介绍css的全面语法: 1.css介绍 2.css基本语法 3.css高级语法 4.css派生选择器 5.css的id选择器 6.css类选择器 7.css属性选择器 !!!!!css介绍 ...

  9. CSDN_投票评选_JS_分析脚本

    作者: 铁锚 日期: 2013年12月31日 如题, 使用说明如下: 1. 原创图书 http://special.csdn.net/book2013/yc.html 2. 引进图书 http://s ...

  10. RabbitMQ安装使用详解

    1.下载相应的版本安装:http://www.rabbitmq.com/download.htmleg:http://www.rabbitmq.com/releases/rabbitmq-server ...