1、如何理解p、v操作:
P: s-- 若s>=0 则占有资源,向下执行 ,否则等待该资源,底层表现在加入该资源的等待队列上
V: s++ 即归还资源,若s>0 则继续向下执行,若s<=0 ,则说明原本s的值是负数,有进程正在等待,此时需要从等待队列上将其唤醒。(s=0,表示有一个在等待,依次类推)
执行完P、V操作之后的s值: s>=0 s表现为可用的资源数 S<0表现为正在等待的进程数。
2、 如何做P、V操作题 :
1、分析题目,抽取进程的逻辑关系,具体表现为每个进程需要什么资源 做什么事 返还什么资源 。如若要根据某种情况选择不同的执行方案 则需要增加 控制变量 ,当然这也是临界变量;
2、选择信号量,即互斥信号量和同步信号量。 互斥信号量即两个进程对临界资源的访问,这取决于临界资源的个数,一般为1。 设置同步信号量取决于上一步中逻辑关系,每个进程什么时候需要被阻塞 ,则加一个信号量,一般来说 一个信号量用于阻塞一个进程,被另一个进程唤醒。
3、伪代码
1、遵循这样一个原则,先P(同步信号量),再P(互斥信号量),操作 ,V(互斥信号量),V(同步信号量)
原文:https://www.cnblogs.com/chennywang/p/13396267.html