307
社区成员
发帖
与我相关
我的任务
分享总结分析三次作业中同步块的设置和锁的选择,并分析锁与同步块中处理语句之间的关系
优先选择了 synchronized 锁,原因非常简单,就是因为简单好写。第三次作业使用了 ReentrantLock,这是因为要避免当两个电梯一起冲向 F2,所以要手动加锁,否则会出问题。
总结分析三次作业中的调度器设计,并分析调度器如何与程序中的线程进行交互;总结分析三次作业中的调度策略,并分析自己的调度策略是如何适应时间、电量等多个性能指标的
架构很清晰:调度器向电梯派人,派完人就 notifyAll。特别地,我们的调度策略第一次就是按照指导书实现的先到优先,但是被发配B房了,所以后来换成了LOOK和一个神秘cost算法。比如,如果同向能捎带cost就低之类的。总之,基本上对时间看齐
分析自己程序出现过的bug以及自己面对多线程程序的debug方法
一二次作业未发现bug。特别地,第二次作业因为设置了单个电梯不能同时接20个人,奇迹般地躲过了hack。
第三次作业遇到了两个bug:一个是加锁顺序错误导致的死锁,另一个是如果因为维护把人放下,即使到达了目的地仍然会输出临时下车。
debug方法比较简单,就是点击调试,然后看哪个线程死锁了。
结合三次作业谈谈从线程安全和层次化设计的理解
线程安全在复杂的系统里是一个非常困难的问题。涉及原子操作,加锁等多种问题。进行层次化设计或许可以减少锁的粒度和嵌套层数,从而一定程度上避免死锁问题。
我使用Gemini 3 Pro大模型进行了代码检查和评测集搭建。这一点其实大模型做的非常好。但是有一些边界情况大模型无法发现,包括但不限于65个人突然塞到一个电梯里的情况。
谈谈自己二单元的真实体验和感受,向我们提出建议。
第二单元似乎有点难但不过还不错能接受