BUAA_OO 第二单元总结

homework5:

  笔者采用生产者-消费者模型进行架构:

  同步块的设置和锁的选择:用synchronized方法将Scheduler中的方法锁住,防止出现异常情况。同时只从RequestQueue中调用资源。

  调度器设计:通过InputThread中填补的waitqueue,在Schedule中将各个请求分至不同的楼座对应的Elevator

  bug分析:在判断电梯的人数是否达到六人时,没有及时在循环中break,导致电梯会出现多人的情况

       在输出部分没有加锁,导致互测时出现问题

homework6:

  笔者仍采用生产者-消费者模型进行架构:

  同步块的设置和锁的选择:用synchronized方法将Scheduler中的方法锁住,防止出现异常情况。同时只从RequestQueue中调用资源。

  调度器设计:由于homework6在homework5的基础上仅添加了横向电梯且不存在换乘,所以可以将新添加的横向电梯当成纵向电梯处理。笔者新建横向电梯类,利用调度器将个人

        请求分别分配至对应的电梯。

  bug分析:横向电梯添加时出现了移动策略上的疏忽,导致电梯会在特定楼座卡死,出现恶性暂停

homework7:

  由于出现了换乘问题,笔者在homework6的基础上添加了buffer类处理主请求,辅助调度器进行调度:

  同步块的设置和锁的选择:用synchronized方法将Scheduler中的方法锁住,防止出现异常情况。同时只从RequestQueue中调用资源。同时锁住buffer类的各个方法。

  调度器设计:由于homework7中最多换乘两次,故将请求分解成三个辅请求,即纵、横、纵,同时将请求类设置3个Boolean变量,代表对应辅请求是否完成,再通过调度器

        将各个辅请求分配至对应电梯进行处理。

 类图:

    

   

 

新得体会:

  本次oo电梯月我收获了很多关于线程的知识,这在我以后的学习生活中会给我带来很大的收获。同时,在今后的编程过程中,我也有了新的处理问题的方法。

posted @ 2022-05-04 17:01  KeiEswy  阅读(19)  评论(0编辑  收藏  举报