题记:
最近一直在学习操作系统,学到pv操作这里的时候想更好的理解一下
正文:
概要:
- pv操作只作用于并发进程,也就是说在非并发进程里面基本不会使用。
- 而在并发进程使用中就会出现共享资源,在共享资源的使用中就出现了很多问题,
P操作:申请资源(pulse?)
V操作:释放资源
简易的pv操作实例:
题目:公路上有5辆车,有2辆向左,有3辆向右行(如图)
进行P操作的过程就是:当A车过路时,只剩下2个车道,也就是当A进程运行的时候,资源只剩下2个,依次类推,当B车和A车同时过路的时候就只剩下一个资源了,如果加+C就是3个资源都同时被使用,如果此时有对向来往的车辆就要等待,也就出现了问题。例如D车再来的时候也就存在了一个等待资源。
生产者与消费者问题:
//当生产者时
{ do
producer an item in nextp;
P(empty); //empty表示缓冲区是否为空,初始值为1
P(mutex);
buffer(in)=nextp;//产品送往缓冲区
in=(in+1) mod n
V(mutex);
V(full);//full表示缓冲区是否为满,初始值为0
while (1);
}
//当消费者时
{ do
P(full);//同理
P(mutex);
nextp=buffer(out);//out(从缓冲区中取出一个产品)
out=(out+1) mod n
V(mutex);
V(empty);//同理
consume the item;
while (1);
}
PV操作的优缺点:
3、P.V操作的优缺点
优点:
简单,而且表达能力强(用P.V操作可解决任何同步互斥问题)
缺点:
不够安全;P.V操作使用不当会出现死锁;遇到复杂同步互斥问题时实现复杂
PV操作必须成对出现:
当为互斥操作时,它们同处于同一进程;
当为同步操作时,则不在同一进程中出现;
如果P(S1)和P(S2)两个操作在一起,那么P操作的顺序至关重要,一个同步P操作与一个互斥P操作在一起时,同步P操作在互斥P操作前,而两个V操作无关紧要