• 幕客老师召集小伙伴
  • 运维高手36项修炼
  • python自动化运维项目实战
  • nginx从入门到实战
  • 阿里云与Centos7实战

进程同步信号量PV操作

一)什么是信号量

信号量(Saphore)由一个值和一个指针组成,指针指向等待该信号量的进程,值表示临界资源的个数。

二)为什么要用信号量的PV操作

我们用信号量及PV操作来实现进程的同步和互斥。PV操作属于进程的低级通信。

 

三) 信号量PV操作

PV操作的含义PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下:
    P
S):①将信号量S的值减1,即S=S-1
           
②如果S>=0,则该进程继续执行;否则该进程置为等待状态,排入等待队列。
    V
S):①将信号量S的值加1,即S=S+1
           
②如果S>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。

所以:信号量S>=0时,S表示可用资源的数量。当S<0时,表示已经没有可用资源,S的绝对值表示当前等待该资源的进程数。

四)信号量使用需注意

    (1)分析进程间的制约关系,确定信号量种类。在保持进程间有正确的同步关系情况下,哪个进程先执行,哪些进程后执行,彼此间通过什么资源(信号量)进行协调,从而明确要设置哪些信号量。

    (2)信号量的初值与相应资源的数量有关,也与P、V操作在程序代码中出现的位置有关。

    (3)同一信号量的P、V操作要成对出现,但它们分别在不同的进程代码中。

四)几种常见的关系场景

我们有多少个资源,信号量的初始值就是几,谁用了就减1,打个比方,如果10个人有2支枪,这十个人的名字分别叫A,B,C,......,那么我们就把信号量的初值设为2.A在使用之前,先把S-1,以便告诉其他人他用了一支枪,B使用之前也把S-1,这时S=0了,也就是说,它是可以使用这只枪的.当C也打算要使用一支枪的之前,也把S-1,这时S<0了,说明已经没有枪可以用了,于是C就排队等候.....以此类推,这时A用完了枪,先把S+1,这时如果S>=0,A就继续干别的事情,只当什么事情都没发生,如果S<0,则说明有人在排队,于是把队列最前面的C唤醒,告诉他,现在有一支枪还回来了,C可以使用了 。

 

 

进程同步信号量PV操作

Pingbacks已打开。

引用地址

暂无评论

发表评论