• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

Recommended Posts

OO_第二单元总结

第一次作业

架构

我使用生产者-消费者模型。有一个读取线程读取请求并将其发送给调度程序。当输入请求到来时,使用一个调度器,由调度器分配给五个楼层的电梯线程来执行运输任务。

同步块和锁

输出线程:确保TimableOutput。println()的线程安全,我创建了一个新的输出类,并在输出方法中添加了一个同步锁。输出时,将输出内容传递给方法,以确保输出线程的安全。

请求队列:创建一个新的类PassengerList来记录请求队列。同步方法用于确保诸如入队、出队和查询号等原子操作的独立性。该类用于将请求从输入类传输到调度程序,由调度程序将请求分发到不同的电梯,等等。请求队列类是实用且可扩展的。

调度器设计和交互

我用的是强化版的ALS。当到达主请求的起点时,基准ALS不会在相同的方向上被捎带。我把这种情况设置为捎带,测得的性能是优化的。计划程序使用生产者和消费者模型,通过的PassengerList类与电梯线程进行交互。作为生产者的调度程序将请求添加到队列中,作为消费者的电梯线程执行请求。

UML类图

image

UML协作图

image

第二次作业

架构

在第一次赋值的基础上,做了增量开发,分别增加了以下几个类:

调度类将数据反馈给每栋楼的电梯调度员,再由调度员分配具体的电梯。

因为楼层和楼层的电梯很多功能细节是不一样的。所以根据楼层电梯的实现方式,在改变了一些细节后,增加了一类新的整层电梯。

调度器设计和交互

电梯线程的调度方法遵循第一个操作的调度方法。楼(层)调度器采用平均分布的调度策略。Schedule类输入的请求通过PassengerList类接收,然后通过这个类分发到不同的电梯线程。

同步块和锁

在这个作业迭代期间,不需要更改和实现新的同步块和锁。

UML类图

image

UML协作图

image

第三次作业

架构

这次操作和上次的关键区别在于乘客可以换乘。因为乘客的路线可以分为大楼(楼层)的基本路线。我创建了一个新的乘客请求类PerRequest。当程序读取新的PersonRequest时,计算最佳路线,并对PerRequest类进行编程以将其提供给输入类。每次进入输入类,都会按照当前的基本路线来装运请求。完成更新目标的基本路线后,再次进入输入类,直到请求到达最终目的地。其他调度程序线程和电梯线程保持不变。

调度器设计和交互

在这个作业迭代中,不需要更改和实现新的调度程序。

同步块和锁

在这个作业迭代期间,不需要更改和实现新的同步块和锁。

UML类图

image

UML协作图

image

Bug的分析与修复

第一个作业的输出线程不安全。

Fix:实现了一个类,所有输出都通过这个类的output方法。和锁的方法来保证输出线程的安全。

当水平电梯调度员将电梯分配给不同的水平电梯时,第三个作业没有考虑电梯对于请求的基本路线是否是可到达的,导致可能被分配给水平电梯的不可运输的请求。

修复:在水平电梯调度员被分配到不同的水平电梯之前,判断可达性。

心得体会

在生产者-消费者模型中,要特别注意对消费者线索终点的判断。这个模块的错误和差错很容易导致轮询、提前终止等bug。对于这项工作的最终迭代版本,它更像是时间管道模型。对于这种层次化的设计,要找一条主线,方便理清思路。在这个任务中,我们可以抓住每一步请求在整个流水线中的分配位置作为主线,设计流水线的每一个循环。c

Link to comment
Share on other sites