本工程利用C++11的线程类进行多线程的操作,涉及到线程的互斥量的使用,简单记录一下整个工程的关键内容: 主要是涉及到两个类的抽象,一个为电梯间,一个为电梯,一个电梯间类包含两个电梯类的对象;
电梯间选择电梯策略:
a)判断用户的本身请求状态是否与电梯的状态一致(UP or DOWN),满足后判断电梯的当前楼层与请求的楼层的层高关系,比如说:client从8楼到16楼,但是目前电梯处于10楼且 是上升状态,则该电梯不符合情况,该用户的信息不添加进电梯,而是留在电梯间的请求列表里符合情况时,则将client的信息添加进所选择的电梯requestList列表里面;一直循环检测电梯间的请求列表,对适合的client进行选择添加
b)选择电梯:
对电梯间的用户信息进行添加到选择的电梯去时,假如两台电梯都是满足(a)条件,则需要维护该用户相对两台电梯的一个权重(权重以请求的src楼层与电梯的current楼层差的 绝对值表示,电梯为STOP时候也符合该情况)然后选择权重小的电梯进行client信息的添加,并删除电梯间内存储的该用户的信息。
c)电梯间将client的信息传进适合的电梯时,对是处于STOP状态的电梯状态进行改变,根据src与current的相对位置改变(为UP or DOWN)
电梯的运行:
创建电梯运行线程,维护两个列表,一个维护楼层的请求列表,一个维护用户到达楼层的列表;
电梯移动的过程中进行进入用户的管理,以及到达用户迁出的处理;
每个楼层均检测是否有用户要进入电梯,有则将用户信息从requestList列表删除,添加入arriveList列表
运行效果:
该工程资源的地址:
点击打开链接