OO第二单元总结-电梯调度
题目回顾第一次题目有 6 部电梯,在某些时间节点,会有一些乘客发出请求:乘坐指定电梯 e,从楼层 x 到楼层 y,且每个乘客有一个优先级 p。当电梯开门,关门,到达任一楼层,乘客进出电梯时,需要输出特定的信息。每一部电梯的移动速度给定,同时电梯的开关门之间有一定的时间间隔。目标是将所有乘客送到目的地(正确性),且使得系统总运行时间,乘客优先级加权等待时间,电梯耗电量(与开关门次数和移动次数有关)最小化。 第二次迭代乘客不再指定乘坐哪一部电梯,而是由系统自行决定。同时,新增临时调度(SCHE) 事件,要求指定电梯以特定移动速度,从楼层 x 移动到楼层 y ,到达 y 后使所有乘客离开,关门并等待一秒,结束临时调度事件。SCHE-BEGIN 必须在输入 SCHE 后短时间内输出(不能有两次 ARRIVE)。临时调度期间不能有 RECEIVE和中间楼层的开关门。 同时,新增了 RECEIVE 约束,当将乘客分给某个电梯时,要输出一条分配信息,当电梯没有任何的 RECEIVE 时,电梯不能移动(防止自由竞争策略)。 RECEIVE 的解除有两种情况:当乘客离开电梯时会解除其的...
多线程Debug经验分享
OO多线程 debug 经验分享前情提要本人4月4日晚上 debug 写到了4月5日凌晨三点,睡前以为修好了bug,在自己评测机上跑了6000组数据,结果第二天起床发现6000组数据中跑出了3个bug,又改到4月5日晚上六点终于改好了(至少跑了3200组数据不成问题)。 这里分享一下这几天 debug 出的心得。 多线程debug - 基础版IntelliJ IDEA 中有一个强力的多线程分析工具 - 转储线程,这个功能可以在运行程序卡死时,查看每个线程的具体情况。我们以最经典的死锁为例。 12345678910public class Main { public static Object A = new Object(); public static Object B = new Object(); public static void main(String[] args) { DeadClass C = new DeadClass(A, B); DeadClass D = new DeadClass(B,...