这是一个分布式停车场系统。
处理问题如下:
某停车场共有TOTAL-NUM个车位, ENTRY-NUM个进口, EXIT-NUM个出口. 现需要一个用于停车场控制汽车进出的分布式系统, 在该系统中没有集中的管理者(central server), 每个进(出)口通过通信平等协商保存当前车库的状态信息(如空闲车位数UNOCCUPIED-NUM等), 并据此决定是否允许车辆进入, 为简便计, 假定通信是可靠的.
不考虑节点/进程失效的情形, 设计用于该停车场控制的分布式系统, 并给出汽车进出时使用该系统的方法.
如果新增一个进口节点/进程, 请考虑如何使该进口能参与工作.
主要技术为Lamport算法,涉及Java socket、Java多线程等。 使用方法: 编译后,命令行中运行。对于第一个出入口,命令格式如下: java hjg.DisPark nodeid total_num entry/exit
其中,nodeid必须为1,必须指定总车位数total_num,第三个参数表示此节点功能,entry表示入口,exit表示出口。 输入后会提示此节点地址,后面新增节点时需要用到。
之后新增加节点作为入口或者出口,打开新的命令行,输入如下格式命令: java hjg.DisPark nodeid entry/exit addressList
其中,nodeid为节点编号,不能为1,entry/exit指定节点功能,addressList为已有的所有节点的地址。注意,是所有地址!因为系统中并没有使用网络传输节点信息,偷懒没有写该功能,新增节点无法从系统中的某一个原始节点得到所有其他节点的信息。
在入口节点,可输入的命令如下: h: 帮助信息 help: 帮助信息 show: 查看系统实时状态 enter: 由当前入口进一辆车
出口节点,可输入的命令如下: h: 帮助信息 help: 帮组信息 show: 查看系统实时状态 exit: 由当前节点出一辆车