269
社区成员




建了主要类,电梯线程,乘客schedular,和处理input的线程,以及处理请求的线程。其中大部分都是在main函数里建的实例,把mainqueue传到其他类里方便统一操作。还有getadvice获取电梯下一步的状态。
1.开始出现cpu超时,原因是一句catch里的内容没有换为e.printStackTrace()而是用了自动补全的。。
在所有的maintable方法设置了锁,唯一多个线程都需要访问的。
不需要调度。直接把对应乘客分给电梯。电梯用lookstrategy处理请求。
对新增的sche指令,主要改了电梯和subqueue部分,其中还新增了buffer用来把sche时分给电梯的请求传到subqueue里。改了getadvice的判断。
1.在move后面加了判断是不是sche,防止移动超过两层。
2.删除了sche外面没必要的锁,避免sche响应时间太长。
3.把分配策略改了,不判断是否在sche,防止超时,所以需要加一个buffer能防止begin之后receive。
新增的sche,需要在电梯类的一些方法和subtable方法里加锁,因为会有需求回流。
分配请求的条件:哪个需求少就分给哪个。开始如果在sche就不分配请求,但是这样会导致如果来了好多请求会分给同一个电梯超时,所以把这个条件去掉了。
没怎么改。新增了transfer类连接两个电梯来统一update。在电梯里新增了相关方法。改了getadvice,让电梯只要到了换乘层就执行放人进人然后离开。
中测bug:没有统一begin和end导致b电梯begin后输出receive。
强测:direction计算直接返回原来的没有重新算导致sche之类改变方向的指令之后方向错了会把乘客分给update后不能送他的电梯。
新增的transfer里的状态需要加锁。
没变,多了对update后的ab电梯能不能进的判断。
transfer类记录进度:ready->begin->finish->end,同步update。
运行时设置occupy,empty记录换乘层的状态,并且move到换乘层后立刻放人进人离开。
1.中间输出变量,看输出结果,如当前occupy状态。
2.分给电梯请求之前的部分可以调试。
3.看代码逻辑问题,语句处理先后问题。
线程安全:在所有需要对同一个东西读写交互的方法加上锁,如对mainqueue,或同一个subqueue。如果加多了可能导致运行时间过长。
层次化设计:每个模块应该用清晰划分的职责,并有清晰的接口与其他模块交互,我的代码存在一些某个类与其他类交互过多的问题,这样在多线程中也很容易出现线程不安全的问题,应该减少变量在过多类传递。