zoukankan      html  css  js  c++  java
  • 【面向对象】第二单元总结——电梯

    设计策略

    本次作业开始引入多线程编程。

    第一次作业是实现单部单请求电梯,我采用的策略是通过输入把请求保存在调度器的队列中,调度器会向电梯发出指令以驱使其运行。

    第二次作业是实现单部多请求电梯,我采用的策略是输入之后,调度器对输入请求进行处理,然后保存在电梯的不同队列中(向下运行队列、向上运行队列),电梯按照运行队列的顺序运行。从总体上来说,电梯的运行模式是上下行交替。

    第三次作业是实现多部多请求电梯,我采用的策略与第二次类似,不同点是调度器会按一定的算法把请求保存在不同电梯的队列里。

    对于线程终止的说明是,输入终止会记录标记,电梯队列为空并拥有终止标记时停止运行。

    代码度量

    第一次作业



    第二次作业




    BUG

    BUG内容

    自己出现的BUG内容主要是如何向队列分配请求的算法上,还有就是电梯完成当前队列的判断条件上。

    寻找BUG的策略

    由于本次作业与第一次作业最大的不同在于多线程的使用,所以在寻找BUG的时候我会更多地测试并发性,请求同时出现如何处理?能否实现捎带?当电梯停止运行,更新下一个目的地的时候出现了新请求该如何处理?诸如此类的问题......

    心得体会

    设计原则

    在本次作业中我运用到了单例模式、工厂模式、生产消费模式等成熟的设计模式,同时也注意遵循单一责任原则、开闭原则等设计原则。使用成熟的模型,并遵循良好的规范可以使我的程序在运行时更加稳定,程序的运行逻辑更符合我对它的期望,不会出现一些奇奇怪怪的BUG,难以定位。就算是出现了BUG,也多半是自己设计上的失误,能够较快更正。

    线程安全

    要写好本次多线程作业,我觉得务必要把锁与同步的细节弄清楚。notify和wait如何配合使用?锁对象和锁方法究竟有什么区别?弄清楚这些之后,才能确保线程运行的逻辑在我们的控制之下。

  • 相关阅读:
    C语言的指针
    C语言的编译过程和GCC编译参数
    GCC编译器的安装
    全字段多条件搜索(api接口)
    C# Replace字符替换函数
    NetCore MemoryCache使用
    vs2017 C# ActiveX浏览器插件 创建 发布 C# windows窗体控件库(.NET Framework)注意事项
    [Asp.net core 3.1] 通过一个小组件熟悉Blazor服务端组件开发
    [AspNetCore 3.0 ] Blazor 服务端组件 Render, RenderFragment ,RenderTreeBuilder, CascadingValue/CascadingParameter 等等
    [AspNetCore 3.0] 在RazorPages/MVC 中使用 Blazor (Razor组件)
  • 原文地址:https://www.cnblogs.com/LifeIsAGame/p/10761869.html
Copyright © 2011-2022 走看看