如何操作P& V工作并设置信号量值?

时间:2017-10-22 13:56:35

标签: java semaphore

我对操作P& P的操作感到困惑。 V在信号量中工作(如果存在差异,则特别适用于Java)。

据我所知,操作P递减信号量的值,如果新值<0则该过程被阻止,而操作V则相反。但是,操作P可以将信号量值减少到负值吗?如果是这样,是否意味着操作V必须将信号量增加到正值才能给进程一个许可?

假设我们有4个进程(或线程),称为A,B,C和D.并且信号量S设置为2.这些进程被视为创建的(A,B,C然后是D) )。手段A先行,然后B秒......等等。

Semaphore S=new Semaphore(2);
S.acquire();
print(Thread.currentThread().getName() +" is in with S value=" + S.value);
S.release();
print(Thread.name +" is out S value=" + S.value);

从我对它们的工作方式的理解,我说输出将是这样的:

  

A是S = 1

     

B与S = 0

     

C尝试进入S = -1(这是正确的吗?)

     

B尝试进入S = -2(这是正确的吗?)

     

A出局时S = -1

     

C是S = -1

     

B出局时S = 0

     

D与S = 0

     

C出局时S = 1

     

D出局时S = 2

P.S:S.value并不存在,我只是把它放在那里,以显示我想要看/展示的内容。

1 个答案:

答案 0 :(得分:1)

从N号开始递减值的想法是允许最多N次调用不阻止。

当值达到0时,下一个调用将被阻塞,值将不会递减,它将保持为0.

一旦释放,该值将增加到1,并且将发信号通知等待进程以尝试获取释放的锁定。只有一个人能够做到,其余的将被阻止。

当所有进程释放其信号量时,该值将返回N.