又见PV操作

来源:互联网 发布:淘宝时尚初秋长袖睡衣 编辑:程序博客网 时间:2024/05/16 08:41

PV操作的由来


进程之间的三个状态的转换就是用PV操作来控制的。PV操作的三个部分:P操作、V操作、信号量。

 

信号量最早出来解决进程同步与互斥的问题。信号量(Saphore)由一个值和一个指针组成,指针指向等待该信号量的进程。信号量的值表示相应资源的使用情况。信号量S>=0时,S表示可用资源的数量。执行一次P操作意味着请求分配一个资源,因此S的值减1;当S<0时,表示已经没有可用资源,S的绝对值表示当前等待该资源的进程数。请求者必须等待其他进程释放该类资源,才能继续运行。而执行一个V操作意味着释放一个资源,因此S的值加1;若S<0,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。

 

举例

桌子上有一个水果盘,每一次可以往里面放入一个水果。爸爸专向盘子中放苹果,儿子专等吃盘子中的苹果。

 

分析:把爸爸、儿子看作二个进程,试用P、V操作使这四个进程能正确地并发执行。

 

解答:

semaphore  S_PlateNum; // 盘子容量,初值为1

semaphore  S_AppleNum;  // 苹果数量,初值为0

void  father( )                // 父亲进程

{

    while(1)

    {

        P(S_PlateNum);

        往盘子中放入一个苹果;

        V(S_AppleNum);

    }

}

void  son( )  // 儿子进程

{

    while(1)

    {

        P(S_AppleNum);

        从盘中取出苹果;

        V(S_PlateNum);

        吃苹果;

    }

}

 

注意点

S的绝对值表示等待的进程数,同时又表示临界资源,这到底是怎么回事?

答(个人看法):当信号量S小于0时,其绝对值表示系统中因请求该类资源而被阻塞的进程数目.S大于0时表示可用的临界资源数。注意在不同情况下所表达的含义不一样。当等于0时,表示刚好用完。


小结

其实知识点没有学不会这一说,只有自己看的多与少的问题。弄清楚他的由来,再结合自己的生活例子去学习,书上的知识只不过是生活经验的抽象罢了。


0 0