经过讨论和设计,对于多路电梯调度,我们确立了具体的数据结构模型,主要还是采用C-LOCK算法,另外加一个多线程调度。
数据结构:
1.考虑到电梯的变化是一个动态变化的过程,那么要在动态过程中实现正常跳转,首先要确定各种跳转的状态, 因而这里我们使用枚举类型来表示电梯的各种状态:
enum {updownstophomeStatehome};同时初始化最初状态为电梯在楼层一。
2.对于乘客来说, 显然要有一个进入电梯与走出电梯的队列, 因而在这里我们是用的链表来实现这个过程的,同时用结构体来保存该乘客的信息:
typedef struct passage
{
int now//乘客当前所在的楼层
int dis//乘客的目的地楼层
struct passage *next
} Passage;
3.虽然电梯中的状态是由枚举类型来实现的, 但是在整个程序的运行过程中,我们还是为电梯设置了一个结构体类型,以便保存更多的信息:
typedef struct lift
{ int count_C//计数电梯已到达的层数
int count_A//电梯人数计数器 记得必须初始化为 0
int flag_inHigh//二十个楼层有无请求的标志,哪个楼层如果有请求,该标志置 1
int weight//电梯重量,记得要进行初始化为 0
int flag_out[High];
}Lift
函数接口说明:
函数中的参数均是使用的全局变量的传递,下面就将设想的主要函数及他们之间的参数的关系列出如下:
int OutOrIn(Lift &L,Passage *Queue,Passage *LiftQ;//进和出电梯的总函数
int Update(Lift &L,Passage *Queue,Passage *LiftQ;//刷新的函数
int Run(Lift &L,Passage *Queue,Passage *LiftQ;//整个电梯各种状态转换的函数
int OpenTheDoor(Lift &L);//开门
int CloseTheDoor(Lift &L);//关门
int Test(Lift &L,Passage *QueuePassage *LiftQ);// 测试电梯关门还是开门的函数
int Request(Lift &L,Passage *Queue);//发出请求信号的函数
int ClosestLift((Lift &L);//调度最近的电梯的函数
int Weight(Lift &L);//计算电梯重量的函数
开发者:闫立新 苏海岩