城市道路十字路口的通行规则是“红灯停,绿灯行”,请用信号量和PV操作描述交通信号灯和汽车通过十字路口的同步行为

城市道路十字路口的通行规则是“红灯停,绿灯行”,请用信号量和PV操作描述交通信号灯和汽车通过十字路口的同步行为

1)识别那些可以作为进程

信号灯,汽车

2)其次识临界资源,即进程共享的事务

信号灯,汽车

3)定义数据结构

定义共变和私有变量:

Int  inter=10;//信号灯延长时间

Int  number=0;//等待车辆数目

4)定义进程操作

4.1交通信号灯控制进程操作:

交通信号灯延时10秒

交通灯颜色切换为绿色

唤醒所有等待红灯信号的车辆使其同行

重置延时时间为10秒

绿灯信号延时十秒

绿灯颜色切换为红色

重置延时时间为10秒

 4.2汽车进程操作

绿灯则通行

否则就使等红灯的车辆数目加一

执行等待动作

红灯变为绿色,结束等待,行车

5)操作进程伪代码实现

交通和信号灯控制进程伪代码实现

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);//执行等待动作

        }

    }

}

 

你可能感兴趣的:(操作系统)