小兔公交问题——PV原题新解

我正在参加「兔了个兔」创意投稿大赛,详情请看:「兔了个兔」创意投稿大赛

在学完操作系统后,对进程管理的PV操作苦于他久矣,这次准备老题新解

image.png

小兔公交问题

兔年有Nice 兔 meet you,

这不,小兔巴士开始营业了,在小兔公共汽车上,兔司机和兔售票员的活动分别是:

  • 司机的活动:
  • 启动车辆——正常行车——到站停车
  • 售票员的活动:
  • 关车门——售票——开车门;

在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?

用信号量和P、V操作实现它们的同步。

题解

解:在小兔巴士的行驶过程中,兔司机活动与兔售票员活动之间的同步关系为:

当兔售票员关车门后,向兔司机发开车信号,司机接到开车信号后启动车辆,在汽车正常行驶过程中售票员售票,到站时司机停车,售票员在车停后开车门让乘客上下车。

因此司机启动车辆的动作必须与售票员关车门的动作取得同步;售票员开车门的动作也必须与司机停车取得同步。

在本题中,应设置两个信号量:s1、s2,s1表示是否允许司机启动汽车,其初值为0;s2表示是否允许售票员开门,其初值为0。

用P、V原语描述如下:

    int s1=O;
    int s2=O;
    main(){
    cobegin
    driver();
    busman();
    coend
    }
    driver(){
        while(1){
        p(s1);
        启动车辆;
        正常行车;
        到站停车;
        v(s2);}
    }
    busman){
        while(1){
            关车门;
            v(s1);
            售票;
            p(s2);
            开车门;
            上下乘客;}
    }

解析

一个描述程序执行时动态特征的概念,这就是进程或线程

再根据并发执行的特征 间断(异步)性

"走走停停",一个程序可能走到中途停下来,失去原有的时序关系;

失去封闭性

共享资源,受其他程序的控制逻辑的影响。如:一个程序写到存储器中的数据可能被另一个程序修改,失去原有的不变特征。

失去可再现性

失去封闭性 ->失去可再现性;外界环境在程序的两次执行期间发生变化,失去原有的可重复特征

posted @ 2023-01-18 22:15  Luciferpluto  阅读(2)  评论(0)    收藏  举报  来源