基于Linux操作系统的司机售票员的PV操作问题

本文介绍了Linux操作系统中的PV操作,用于进程同步和互斥。通过司机和售票员工作的场景,阐述了P操作(申请资源,可能导致进程阻塞)和V操作(释放资源,唤醒等待进程)的工作原理。通过设置车门和行驶状态两个信号量,实现了司机和售票员的有序操作,确保了系统的一致性。
摘要由CSDN通过智能技术生成

基于Linux操作系统的司机售票员的PV操作问题

P操作和V操作室操作系统中,常用的进程管理的操作模型,不同的操作系统有不同的实现方法,而不是一个具体可以直接调用的函数。PV操作主要是可以实现进程的同步或者互斥。接下来就用一个经典的例子理解PV操作

  1. 初步认识
    信号量S
    信号量的值有3种情况有不同的处理方式
    S=0时,表示当前没有可用资源,此时进程会被阻塞,等待资源空闲出来。
    S>0时,表示当前有S个空余资源,此时可以让进程继续进行下去,不会阻塞。
    S<0时,表示当前资源短缺,其绝对值表示同样在等待该资源释放的进程数目

P操作
功能:为进程申请一个资源,或者阻塞一个进程
逻辑:

void P(S)
{
    S=S-1;
    /*信号量自减1,表示申请了一个
    资源,资源数目减去1*/
    if(S<0)
    /*如果S<0了,说明资源不足,申请失败,
    但是S不要加回来,S绝对值用来顺便统计
    一共有多少进程在等待*/
    {
        阻塞正在申请该资源的当前进程,因为资源不够;
    }
}

**总结:**其实P操作就是检测信号量够不够,够的话就启动这个信号量代表的进程,不够的话就暂时把这个进程阻塞了。
【每执行一次P操作,资源数和信号量减少1】

V操作:
** 功能** 释放一个资源。让资源或者信号量增加1个

** 逻辑:**

void V(S)
{
    S=S+1;
    //把当前进程占有的资源释放掉,故S加一
    if(S<=0)
    {
        从阻塞队列中释放一个进程,继续执行;
    }
}

**总结:**V操作就是检测是否队列中有正在等待的进程,有的话唤醒一个。并且释放一个资源
【每执行一次V操作,资源数和信号量就会加一】

接下来我们用一个例子体会:

  • 司机和售票员必须同步:一方面:售票员只有关闭车门后,司机才可以开车;另一方面:司机到站停车后,售票员才可以打开车门。不可以混乱。试用伪代码实现逻辑过程。 *
    设置2个信号量:
    S2 代表车门这个资源,初始值为0
    S1代表行驶状态这个资源,初始值也为0
司机进程
{
     P(S2);
     发动汽车,开始行驶;
     汽车到站,停车;
     V(S1);
}

售票员进程
{
    关车门;
    V(S2);
    售票;
    P(S1);
    开车门;
    客人上下车;
}

【分析】
一开始,司机进程和售票员同时开始进行。
司机进程内:一开始就用P操作检测车门信号量S2。
此时S2=0,P操作之后S2=-1,【车门资源不够,即:车门打开了】于是司机进程被阻塞。一直等待售票员进程内关闭车门,释放S2信号量。这一时期他一直在检测S2是否符合条件
售票员进程内:此时司机进程一直被阻塞。售票员关闭车门后,利用V操作,释放车门资源S2,S2加一成为0。【门关闭】

此时:司机进程内S2变成0后,司机进程检测到符合了。就继续执行司机进程,开车开始行驶。售票员进程也在同时进行,即售票。

售票员售票结束后,会进入到P操作检测行驶状态资源S1,S1此时是0,减一后为-1。不满足条件,【即,汽车正在行驶】。于是售票员进程被阻塞了,等待司机进程释放S1才可以开门。

司机进程内:此时售票员进程已经被阻塞在P操作了。司机到站停车后,利用V操作释放了S1,让S1加一变成0【即,停车】

这时候售票员进程检测到S1满足了要求,P操作通过,于是售票员进程继续进行。她打开了车门。

接下来司机又会回到梦开始的地方:那个一开始检测S2的P操作处,继续执行下去。
【你当然可以设置循环处,不要像我一样没良心一直让他工作】

注释:这个例子里有一段是司机一边开车售票员一边售票的阶段,即:两个进程同时进行。
我们上面举例是售票员售完了票,司机没停车,售票员没办法开门。
但是操作系统的不确定性,完全可能两个进程进行的程度不一样,可能会司机停车了,应该打开车了,可是售票员没买完票就一直不开车门。。。。。
这一个例子不要深究嘛~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值