其他分享
首页 > 其他分享> > 2021-05-24

2021-05-24

作者:互联网

基于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操作就是检测信号量够不够,够的话就启动这个信号量代表的进程,不够的话就暂时把这个进程阻塞了。

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

** 逻辑:**

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

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

【分析】

标签:24,05,阻塞,信号量,2021,进程,操作,售票员,资源
来源: https://blog.csdn.net/CYVenus/article/details/117227291