【软考】——PV操作

版权声明:希望各位能遵守各自内心的原则 https://blog.csdn.net/weixin_40918067/article/details/81564049

           今天我就来带领大家了解PV操作,哈哈!说实话,正在写这博客时候的我,还对PV操作也不太了解;但是我希望通过写这次博客,能同大家一样能有收获!

           其实PV操作也就是实现进程同步与互斥的常用方法!通常我们在用PV方法时,也会用到一个比较关键的工具!那是什么?信息量机制;说真的,我也不知道信息量机制是什么!我只知道信息量机制是一种有效的进程同步与互斥工具;信息量机制与鸟类一样,分为不同的类型;主要的类型有:整型信号量、记录型信号量、信号量集机制等等不同类型的信息量机制;O(∩_∩)O哈哈~

今天我就整型信号量与PV操作的结合来了解下PV操作吧!

信号量机制虽有很多种类型,但是其中的信号量(提示:信号量是整型变量)分为两类

              一类是公用信号量:实现进程间的互斥,初值为1或资源的数目,

              另一类是私用信号量:实现进程间的同步,初值为0或某个正整数;

信号量S的物理意义:S≥0表示某资源可用数S,反过来(S<0),可不止是反之哦!而其S的绝对值表示的是:阻塞队列中等待该资源的进程数;

以上对信号量机制见解,也就是我对信息量机制的了解深度啦!如果有哪位牛人对其有更深的了解,希望指点一二!谢谢!

那我们下面就来讲讲PV操作了,铺垫了这么久终于来到了关键处!^_^

           P操作和V操作是低级通信原语,哈哈哈!那就当然有高级通信原语啦,高级通信原语克服了低级通信原语编程难度大,效率低等问题,当然高级通信原语也有其自身的问题!

P操作:S:=S-1,若S≥0,则执行P操作的进程继续执行;若S<0,则置该进程为阻塞状态(因无可用资源),并将其插入阻塞队列;

V操作:S:=S+1,若S<0,则执行V操作的进程继续执行;若S≥0,则从阻塞状态唤醒一个进程,并将其插入就绪队列;

其中P操作表示的是申请一个资源,而V操作表示的是释放一个资源;这可是很重要,希望大家能记住!

接下来就来个实例,加深下大家对PV操作的印象!

实例一:

         竟然写到了这里,可我还不知道如何利用PV操作实现进程的互斥,还不知道如何利用PV实现进程的同步;说实在的,其实上面的例子已经把互斥的,同步的都写到了(因为都是实际生活中遇到的事情),但是我还没有看透如何利用PV操作实现互斥和同步;

           那我就来写下如何利用PV操作来实现进程的互斥和同步;给和我一样不明白其中原理的伙伴们!

         一、利用PV操作实现进程的互斥

             首先就是令信号量mutex的初值为1,当进入临界区时执行P操作(申请资源),退出临界区时执行V操作(释放资源);^_^,前面那段字其实是书上的实现方式,有点搞不明白!哈哈哈,那现在我就来为大家讲解一下吧!

什么是临界区:

临界区其实就是每个进程中访问临界资源的那段程序,而临界资源又是一个“一次访问仅允许一个进程使用”的共享资源;哈哈,是不是明白了点!

         二、利用PV操作实现进程的同步

             首先进程的同步是用于进程间合作引起的相互制约的问题,要实现进程的同步可用一个信号量与消息联系起来;

进一步加深对PV操作的了解,又来一个实例:

答案:

1、a处填写:V(S1)V(S2);b处填写:P(S1);c处填写:P(S2)P(S3);d处填写:P(S4)

解题思路:

           对于系统中的每个进程,其工作的正确与否不仅取决于它自身的正确性,而且与它在执行中能否与其他相关进程正确地实施同步互斥有关;

猜你喜欢

转载自blog.csdn.net/weixin_40918067/article/details/81564049