a、b两点之间是一段东西向的单行车道,现要设计一个自动管理系统,管理规则如下:当ab之间有车辆在行驶时同方向的车可以同时驶入ab段,但另一方向的车必须在ab段外等待;当ab之间无车辆在行驶时,到达a点(或b点)的车辆可以进ab段,但不能从a点和b点同时驶入;当某方向在ab行驶的车辆驶出了ab段且暂无车辆进入aD.段时,应让另一方向等待的车辆进,Aab段行驶。请用PV操作为工具,对ab段实施正确的管理以确保行驶安全。
【正确答案】:Begin E,W,Flag:Semaphore; Count E,Count W:Integer; Count E:=0;Count W:=0;E:=W:=Flag:=1; Cobegin process East: ∥向东行驶车辆进程 [L1:P(E); ∥检查有无正在进入或离开ab段的东行车辆(访问共享变 量Count (E) ∥仅当无时,才允许车辆作进一步的检查 If Count E=0 Then P(Flag);∥检查东行车辆数目是否为 0 ∥若为0,则再检查是否有西行车辆正在通行 ∥若无则禁止西行车辆通行 ∥否则东行车辆自动等待 ∥若不为0,即已有东行车辆正在通行,不 做任何处理,直接进人ab段 Count E:=Count+1;∥东行车辆数目增加1 V(E); ∥允许其他东行车辆试探进人或离开ab段 ∥车辆通过 P(E)∥检查有无正在离开或进入ab段的东行车辆 Count E:=Count E一1;∥东行车辆数目自动减1 If Count E--0 Then V(Flag);∥检查东行车辆数目是否已为0 ∥若为0,则允许正在等待的西行车辆进入 ab段 ∥若不为0,不做任何处理 V(E);∥允许其他东行车辆试探离开或进入ab段 goto L1;] process West:∥向西行驶车辆进程 [L2:P(W); ∥检查有无正在进入或离开ab段的西行车辆(访问共享变 量Count W) ∥仅当无时,才作进一步的检查 If Count W=0 Then P(Flag);∥检查西行车辆数目是否为0 ∥若为0,则再检查是否有东行车辆 正在通行 ∥若无则禁止东行车辆通行 ∥否则西行车辆自动等待 ∥若不为0,即已有西行车辆正在通 行,不做任何处理,直接进入ab段 Count W:=Count W+1;∥西行车辆数目增加1 V(W);∥允许其他西行车辆试探进入或离开ab段 ∥车辆通过 P(W);∥检查有无正在离开或进入ab段的西行车辆 Count W:=Count W-1;∥西行车辆数目自动减1 If Count W--0 Then V(Flag);∥检查西行车辆数目是否已为0 ∥若为0,则允许正在等待的东行车 辆进入ab段 ∥若不为0,不做任何处理 V(W);∥允许其他西行车辆试探离开或进入ab段 goto L2:] coend; end;
发表评论 取消回复