我对操作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
并不存在,我只是把它放在那里,以显示我想要看/展示的内容。
答案 0 :(得分:1)
从N号开始递减值的想法是允许最多N次调用不阻止。
当值达到0时,下一个调用将被阻塞,值将不会递减,它将保持为0.
一旦释放,该值将增加到1,并且将发信号通知等待进程以尝试获取释放的锁定。只有一个人能够做到,其余的将被阻止。
当所有进程释放其信号量时,该值将返回N.