P操作和V操作室操作系统中,常用的进程管理的操作模型,不同的操作系统有不同的实现方法,而不是一个具体可以直接调用的函数。PV操作主要是可以实现进程的同步或者互斥。接下来就用一个经典的例子理解PV操作
P操作:
功能:为进程申请一个资源,或者阻塞一个进程
逻辑:
void P(S) { S=S-1; /*信号量自减1,表示申请了一个 资源,资源数目减去1*/ if(S<0) /*如果S<0了,说明资源不足,申请失败, 但是S不要加回来,S绝对值用来顺便统计 一共有多少进程在等待*/ { 阻塞正在申请该资源的当前进程,因为资源不够; } }
**总结:**其实P操作就是检测信号量够不够,够的话就启动这个信号量代表的进程,不够的话就暂时把这个进程阻塞了。
V操作:
** 功能** 释放一个资源。让资源或者信号量增加1个
** 逻辑:**
void V(S) { S=S+1; //把当前进程占有的资源释放掉,故S加一 if(S<=0) { 从阻塞队列中释放一个进程,继续执行; } }
接下来我们用一个例子体会:
【分析】