PV操作

 

 

PV操作

 

 

 

1.基本概念

 

1.1临界资源

 

一次只允许一个或有限个进程访问的资源。

 

 

1.1临界区(Critical Section)

 

又叫关键段,是对临界资源进行访问的程序片段。

 

 

1.2信号量(Semaphore)

 

通常是一个整型变量S和一个队列。物理意义是:S>=0表示某资源的可用数目,S<0其绝对值表示堵塞队列中等待该资源的进程(线程被称为轻进程)数。

 

 

1.3互斥量(Mutex)

 

是简化版的信号量,只有两种状态:解锁和加锁。常常使用一个整型量,0表示解锁,其他值表示加锁。

 

1.4P操作

S = S-1,若S<0,则置该进程进入堵塞状态,并将该进程插入阻塞队列;否则继续执行。

BlockQueue bq;

 

Procedure P(var S:Semaphore); 

Begin

S = S-1;

if (S<0){

then

sleep();

bq.push_back(this process);

       End; 

    } 

 

 

1.5V操作

S = S+1,若S<=0,则从阻塞队列中唤醒一个进程,并将其插入就绪队列,然后执行V操作的进程继续执行。否则执行V操作的进程继续执行。

ReadyQueue rq;

 

Procedure V(var S:Semaphore); 

Begin

S = S+1;

if (S<=0)

then

rq.push_back(bq.front() );

bq.pop_front();

       End; 

    } 

 

 

 

2.互斥问题

 

如果多个进程要都要访问一个临界资源,访问的这段代码称为临界区,为了实现进程互斥的进入各自的临界区,采用下面的方式:

S = 1

P(S)

临界区

V(S)

 

 

 

3.同步问题

 

进程A在进程B到达L2前,不应前进到超过L1。

 

S = 0

进程A

L1: P(S)

 

 

进程B

L2: V(S)

 

 

 

4.生产者消费者问题

 

BufEmpty = 缓冲区总数   // 空闲的缓冲区数量

BufFull = 0         //已填充的缓冲区数量

Mutex = 1           //保证同时只有一个进程在写缓冲

 

// 生产者

Loop

生产一个产品

P(BufEmpty)

P(Mutex)

产品存入缓冲区

V(Mutex)

V(BufFull)

endloop

 

 

// 消费者

Loop

P(BufFull)

V(BufEmpty)

从缓冲区中取产品;

使用产品;

endloop

 

 

 

参考资料

 

《系统架构设计师教程》

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值