本文共 1351 字,大约阅读时间需要 4 分钟。
信号灯,汽车
信号灯,汽车
定义共变和私有变量:
Int inter=10;//信号灯延长时间Int number=0;//等待车辆数目
交通信号灯延时10秒
交通灯颜色切换为绿色
唤醒所有等待红灯信号的车辆使其同行
重置延时时间为10秒
绿灯信号延时十秒
绿灯颜色切换为红色
重置延时时间为10秒
绿灯则通行
否则就使等红灯的车辆数目加一
执行等待动作
红灯变为绿色,结束等待,行车
交通和信号灯控制进程伪代码实现
int Red = 0;int Green = 1;semaphore mutex = 1, wait = 0;mutex,number//互斥访问信号量,车辆等待信号量inter=10,number=0,Light=Red;//信号灯延长时间、车辆等待数目、信号灯颜色begin/*信号灯进程操作实现*/Process lightControl(){ While(inter)//使信号灯延时10秒 { Inter--; } Light=Green;//信号灯切换为绿色 P(mutex); While(number--)V(wait);//唤醒所有等待红灯信号的车辆使其同行 V(mutex); Inter=10;//重新设置延时时间 While(inter)//使绿灯延时10秒 { Inter--; } Light=Red;//信号灯切换为红色 Inter=10;//重置延时时间}/*汽车进程操作实现1*/Process Car-i()//i=1,2,3…….{ P(mutex); If(Light==Green) { 通行; V(mutex); } else { number++;//使等待红灯的车辆数目增加1 V(mutex); P(wait);//执行等待动作 通行;//信号灯变为绿色,等待结束,行车 }}Coend/*汽车进程操作实现2完善版*/Process Car-i()//i=1,2,3…….{ While(1) { P(mutex); If(Light==Green) { 通行; V(mutex); break; } else { number++;//使等待红灯的车辆数目加1 V(mutex); P(wait);//执行等待动作 } }}
转载地址:http://vitmb.baihongyu.com/