• 进程管理PV信号量购书店题详解


    有小伙伴要考软设证,遇到个PV信号量的问题,没整的很明白,网上各种都说的云里雾里,这里一起研究下,题目如下:

    题目

    某书店有一个收银员该书店最多允许n个购书者进入。将收银员和购书者看作不同的进程,其工作流程如下图所示。利用PV操作实现该过程,设置信号量S1,S2和Sn,初值分别为0,0,n.则图中a1,a2及b1,b2应该填入?
    在这里插入图片描述

    简单说下信号量S,跟PV操作

    信号量s:一般代表当前某类型资源(或者某种条件)可被进程同时操作的数量,如果小于0则代表操作该信号量类型的进程应该被挂起等待,大于或等于0则能继续执行
    P操作:表示申请一个信号量资源,会将信号量S-1,然后判断S,小于0则挂起等待
    V操作:表示释放一个信号量资源,会将信号量S+1,并且唤醒其他等待该信号的线程

    题目解析

    这个题目不好理解,原因有下面几个
    1:整个购书流程不清楚,是先收银还是先付款这个流程很关键,但这里没有说明
    eg:流程1:进店->购书->收银->付款->离开
    流程2:进店->购书->准备付款->收银->离开
    不同的流程,导致触发的操作会有不一致

    2:资源不清晰,这里信号量代表的临界资源不清晰,刚看题目很容易认为付款人是临界资源,因为同时只允许一个人付款,这里有2个信号量,正常是有2个临界资源,但S1,S2各代表哪边的资源也没有清晰指定

    3:这个题目的解不一定是唯一的,也就是说要达到线程同步,可能有多种方式可以做到,甚至有时用一个信号量也可以(不是说这题用一个就可以),信号量的设计,使用是很灵活的;
    以上3点综合起来,让这个题目很迷…一时间真不好理解,好的是,它是个选择题,可以从选项排除

    解题思路

    1:这里Sn 的使用是很清楚的,进店->出店,所以选项里带sn 操作的肯定可以排除了

    2:信号量操作很关键的点就是,线程唤起做操作前一定是需要做P操作的,不然这个资源就可能被无限线程操作,所以对b1来说一定是个P操作,(选项排除sn 也只剩P 操作选项了…),同样对a1,a2 中一定有个P操作,表示付款进程占据了资源,很显然就是不能上来就P操作,因为s1,s2初始信号量都为0,上来P操作线程就直接挂起了,后面所有流程也就没有了(因为b那边肯定是P操作了),即a1是V,a2是P,这里可以得到1的答案为A,从选项可以看出S1代表付款资源,S2代表收银资源,所有b1操作肯定是P(s2),得到2的答案为C

    完整详解

    1:完整流程
    题目真正的流程是:
    进店->购书->进入付款区域->收银->离开

    2:临界资源
    A:进入付款区域这个条件,每次只能一个顾客进入
    B:可以理解为收银机,同时只能有一个人操作收银机
    这里要把进入付款跟收银看为一个整体,即能进入付款区就必定能被收银员收银;

    所以整个流程也很清晰了
    顾客进入付款区后需要做2件事
    1:通知收银员(释放收银机权限/钥匙)=>V操作
    2:阻止其他人进入=>P操作

    并且这2件事之间应该是原子性的,否则付款区域就可能被其他人进来了,严格来说我认为这里应该先阻止其他人进入等待区即先P操作后在给钥匙给收银员,但是题目限制初始信号量为0,先P操作后面就被挂起了,所有说信号量的设计跟使用是很灵活的,可以有其他很多方式也能达到目的,这里只能以题目进行
    收银员收到信息后开始收银,此时他需要保证其他人员不能再用这个收银机收银了即 P操作,等收银完成,需要通知排队区域让下一个顾客进入付款区即 V操作

    总结

    1:一般信号量S都会代表某个临界资源或者限制条件
    2:信号量的使用跟程序流程是密切相关的,设计前一定要理解好流程
    3:信号量使用是非常灵活的,可以有多个方式达到相同目的,一切以题目为中心

  • 相关阅读:
    ESP32 MicroPython 蜂鸣器及传感器的使用⑦
    Crack:ImageEn 11.4.0 | ImageEn 10.0 不要使用了
    如何系列 如何使用ff4j实现功能迭代
    下载excel模板
    Turtle绘制五角星-第10届蓝桥杯省赛Python真题精选
    DevOps 环境预测测试中的机器学习
    手写一个民用Tomcat (04)
    Pytorch-MLP-CIFAR10
    MySQL进阶 —— 超详细操作演示!!!(下)
    详解动态内存管理!
  • 原文地址:https://blog.csdn.net/lqb3732842/article/details/126741147