BUAA OO Unit-2个人总结 22230612-杭洋

杭洋-22230612 学生 2024-04-20 12:46:35

三次作业中同步块的设置和锁的选择

在本单元的三次作业当中,我设置了两种的锁,

  • 修改电梯自身时需要给电梯的外部加锁。

  • 当得到重置指令的时候给重置部分加锁。

  • 双轿厢电梯的楼层锁。

架构图和复杂度分析

img

img

img

img

三次作业稳定和易变的内容

稳定内容

电梯的基本运行逻辑,如开关门上下客等,以及电梯的调度算法。

易变内容

电梯种类和新的运行逻辑,如重置电梯、新种类电梯等。

如何实现双轿厢的两个轿厢不碰撞的

使用一把可重入锁,当其中一个轿厢正在换乘楼层时,另一个轿厢如果也需要进入换乘楼层,则让该轿厢在换乘楼层外等待。同时保证某轿厢在换乘楼层操作结束之后,下一时刻必须离开换乘楼层。

程序出现过的bug以及多线程程序的debug方法

  • 由于调度器设计的比较简单,出现过的bug主要是电梯状态之间的转换问题。有时候电梯会根据当前状态继续移动从而移动到不合法的楼层,从而出现访问的问题。

  • debug方式:通过编写自动化脚本并在代码当中安排关键位置信息的输入输出,从而观察代码的执行情况。由于多线程不能像之前的程序那样逐行执行,所以插入断点进行编程变得困难,因此使用了这一种比较原始的方式进行debug。

线程安全和层次化设计

线程安全

  • 锁的设计
    • 只在锁所控制的相关数据被改变的时候notify相关线程,并只给由不同线程共享的数据块加锁。
    • 梳理代码逻辑,保证所有的死循环当中,所有的分支一定存在wait或者sleep,从而避免轮询。
    • 线程的退出首先梳理好退出条件的机制,保证逻辑上不存在环路,从而避免线程无法关闭。

      层次化设计

  • 调度器层面
    • 输入-等待队列-调度器
  • 电梯层面
    • 普通单轿厢电梯
    • 双轿厢电梯等待队列-有楼层锁的单轿厢电梯
...全文
33 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

301

社区成员

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

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