OO第二单元总结
一、同步块的设置和锁的选择
输入接口在接受输入时获得waitingqueue锁,一次输入结束时notifyAll,调度器获得锁并分配乘客。
多线程电梯为每部电梯设置一个waitingqueue队列。当waitingqueue为空时,wait()等待输入接口接受输入。电梯每到达一层时,wait()释放锁等待输入。
二、调度设计
第一次作业:
考虑单部电梯的调度,由于不用考虑其他因素,由电梯对waitingqueue里的乘客进行调度。
若电梯里有乘客,则优先运送电梯内乘客到目的楼层,每经过一个楼层判断是否有乘客可以上电梯,如果满足条件则加入电梯乘客队列。
若电梯没有乘客,则对waitingqueue里的乘客进行判断找出最近的乘客优先运送。
第二次作业:
考虑多部电梯的调度,为每部电梯分配一个waitingqueue队列,调度器为每部电梯单独分配乘客,若拿到增加电梯的指令,则同样增加一部电梯和对应的waitingqueue队列。
第三次作业:
与第二次作业相同,只是三种电梯的各项数据不同,调度器分配乘客的时候需要考虑到达楼层和目的楼层。
三、功能设计和架构设计
可拓展性分析:第三次作业中并未采用高效的方法分配乘客给不同类型的电梯,因此当遇到更多更复杂类型的电梯时可拓展性不强,仍有许多需要改进的方法。
四、bug总结
这三次作业互测没有被检出bug,也没有检出别人的bug,但自己在设计时出现了死锁的bug,经分析是未进入每一个线程分别唤醒进程。
五、分析他人bug
互测阶段并没有成功检出他人bug
六、心得体会
浙公网安备 33010602011771号