第八次作业-第二单元博客

喵喵猫323 2024-04-20 09:20:44

1 分析同步设计

1.1 第一次作业

使用synchronized进行加锁。同时,共享对象的成员函数不引入对该对象的加锁,而是由调用者在外部加锁.

1.2 第二次作业

使用synchronized进行加锁。当调用者需要使用多个锁时,按照指定加锁顺序进行加锁。

1.3 第三次作业

电梯调度使用synchronized进行加锁,轿厢保护使用ReentrantLock进行加锁。尽量将可能涉及多个锁的操作,拆分为若干单个锁的操作。

 

2 分析调度器设计

2.1 UML类图

图1 第三次作业UML类图

2.2 UML 协作图

图2 第三次作业UML协作图

2.3 分析稳定和易变内容

稳定内容:核心功能“调度”稳定不变,所以“输入-调度-运行”的整体代码架构稳定不变。

易变内容:可能会增加不同种类的电梯。

 

3 分析第三次作业功能设计

为换乘楼层引入ReentrantLock进行保护:在电梯进入该楼层前,需要获取锁;当电梯离开该楼层后,释放锁。同时,当位于换乘楼层的电梯没有主请求时,电梯自动换乘楼层

 

4 分析bug和debug

4.1 第一次作业

修复了“当主请求为从1楼到8楼,且当前楼层为8楼时,在去1层的过程中,非主请求将电梯填满导致主请求无法上电梯”的bug

4.2 第二次作业

修复了RESET-BEGIN输出时机错误的bug,RESETOUT中部分完成请求重新进入InputRequestList的bug,当InputThread结束后直接结束ScheduleThread的bug,ScheduleThread将过多的请求加入一个电梯的ElevatorRequestList的bug,CPU空转的bug

4.3 第三次作业

修复了新电梯离开换乘楼层是没有释放锁的bug,RESET和换出后没有清除主请求的bug

4.4 debug方法

在指定位置打印当前状态来查看线程死锁时的运行上下文

 

5 心得体会

复习了线程调度的知识,深入理解了线程同步的设计理念。

...全文
48 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

301

社区成员

发帖
与我相关
我的任务
社区描述
2023年北航面向对象设计与构造
学习 高校
社区管理员
  • YannaZhang
  • CajZella
  • C_ecelia
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧