看情况
信号量分记录型信号量和整数型信号量,记录型信号量可以为负值
整数型信号量不可能出现负数,因为当信号量的值变为0后就空等了,不能再减少了,因为有空等,所以效率低
还有一种是记录型信号量,当信号量的值为0的时候还会再减少,然后进程把自己挂在这个信号量的等待队列下,这种信号量可以为负数,而且负数的绝对值就是挂在该信号量下的进程个数。
看王道2.3.3 信号量
void wait (semaphore S){
S.value–;
if(S.value<0){
add this process to S.L
block(s.L)
}