操作系统之PV操作

操作系统之PV操作

关于p操作和v操作的理解

最新推荐文章于 2025-07-31 10:06:21 发布

原创

最新推荐文章于 2025-07-31 10:06:21 发布

·

5.5w 阅读

·

44

·

137

·

CC 4.0 BY-SA版权

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

文章标签:

#操作系统

操作系统

专栏收录该内容

3 篇文章

订阅专栏

操作系统之PV操作

今天在做操作系统老师布置的操作系统作业,但是碰到了一个有关pv操作的问题,由于对pv操作的理解不是很透彻,所以我查阅了很多资料,下面来简单的通俗的介绍一下pv操作

1、信号量

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

私用信号量:实现进程间的同步,初值=0或某个整数

2、信号量S的物理意义:S>=0时表示某资源的可用数,s<0时其绝对值表示阻塞队列中等待该资源的进程数。P、V操作是实现进程同步与互斥的常用方法。

3、P操作表示申请一个资源,V操作表示释放一个资源。

P操作的定义:S=S-1,若S>=0,则执行P操作的进程继续执行;若S<0,则置该进程为阻塞状态,并将其插入阻塞队列。

Procedure P(Var S:Semaphore);

Begin

S:=S-1;

If S<0 then w(S) {执行P操作的进程插入等待队列}

End;

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

Procedure V(Var S:Semaphore);

Begin

S:=S+1

If S<=0 then R(s) {从阻塞队列中唤醒一个进程}

End;

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

令信号量mutex的初值为1,当进入临界区时执行P操作,退出临界区时执行V操作。这样利用PV操作实现进程互斥的代码段如下:

P(mutex)

临界区

V(mutex)

所以,下面我们来看看这道题,如下图,请用并行语句和P、V操作描述图中任务执行过程。

我写的执行过程是这样的,希望大家多多指教

int f1=0; //表示进程P1是否执行完毕

int f2=0; //表示进程P2是否执行完毕

int f3=0; //表示进程P3是否执行完毕

int f4=0; //表示进程P4是否执行完毕

int f5=0; //表示进程P5是否执行完毕

int f6=0; //表示进程P6是否执行完毕

main()

{

cobegin

p1();

p2();

p3();

p4();

p5();

p6();

coend

}

p1(){

...

v(f1);

v(f1);

}

p2(){

p(f1);

...

v(f2);

}

p3(){

p(f1);

...

v(f3);

}

p4(){

p(f2);

...

v(f4);

v(f4);

}

p5(){

p(f4);

...

v(f5);

}

p6(){

p(f3);

p(f4);

...

v(f6);

}

p7(){

p(f5);

p(f6);

...

}


手机pay支付怎么用
淞沪会战中哪一战役惨烈悲壮被称为“血肉磨坊”