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

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

  本次作业是我第一次接触多线程,建立了请求模拟器、调度器和电梯运行三种线程。请求模拟器负责在输入后识别有效请求;调度器在扫描有效请求后将新的请求加入请求队列,并扫描三部电梯的信息,最后遍历请求队列中的请求进行调度,并根据得到的信息进行请求状态和请求队列的更新;电梯运行线程则根据得到的信息进行运动,同时改编电梯信息。实现多线程功能中最大的挑战是实现共享数据的安全、避免冲突(一开始没有加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. 【Unity Shaders】Alpha Test和Alpha Blending

    写在前面 关于alpha的问题一直是个比较容易摸不清头脑的事情,尤其是涉及到半透明问题的时候,总是不知道为什么A就遮挡了B,而B明明在A前面.这篇文章就总结一下我现在的认识~ Alpha Test和A ...

  2. 精通CSS+DIV网页样式与布局--页面背景

    上篇博客,我们主要简单的总结了CSS的图片效果,我们这回来讲讲CSS如何对网页的背景进行设置,网页的背景是整个网页的重要组成部分,她直接决定了整个网页的风格和色调.这篇博客简单的总结一下如何用CSS来 ...

  3. 【Android 应用开发】 Android 相关代码规范 更新中 ...

    . 简介 : Android 常用的代码结构, 包括包的规范, 测试用例规范, 数据库模块常用编写规范; 参考 : 之前写的一篇博客 [Android 应用开发] Application 使用分析 ; ...

  4. java设计模式---三种工厂模式之间的区别

    简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式.其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性. 本文是本人对这三种模式学习后的一个小结以及对他 ...

  5. MariaDB存储引擎

    MariaDB存储引擎 存储引擎就是指表的类型.数据库的存储引擎决定了表在计算机中的存储方式.存储引擎的概念是MariaDB的特点,而且是一种插入式的存储引擎概念.这决定了MariaDB数据库中的表可 ...

  6. 使用js动态添加组件

    在文章开始之前,我想说两点 1 自己初学js,文章的内容在大神看来可能就是不值一提,但是谁都是从hello world来的,望高   手不吝指教# 2 我知道这个标题起的比较蛋疼,大家看图就能说明问题 ...

  7. Linux IPC实践(1) -- 概述

    进程的同步与互斥 进程同步: 多个进程需要相互配合共同完成一项任务. 进程互斥: 由于各进程要求共享资源,而且有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥;系统中某些 ...

  8. linux 下启动java jar包 shell

    linux 下启动java jar包 shell #!/bin/sh JAVA_HOME=/usr/local/jdk1.6.0_34/bin/javaJAVA_OPTS="-Xmx256m ...

  9. Python学习笔记 - 迭代器Iterator

    我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器和带yield的genera ...

  10. 江湖问题研究-- intent传递有没有大小限制,是多少?

    出门一步,便是江湖,江湖上有许多流言. 比如这条: intent传递是有大小限制的,具体在40KB左右. 当然也有传言说是1M左右. 数百头母驴为何半夜惨叫? 小卖部安全套为何屡遭黑手? 女生宿舍内裤 ...