我的书上说的答案是x。
但这怎么可能?我刚刚从Differnce between Counting and Binary Semaphores了解到,计数信号量具有正的价值,因此多个进程可以访问关键部分。因此,在这种情况下--怎么能说x进程在等待,因为当到达0时,下一个等待信号将繁忙--等待一个进程,信号量的值永远不会小于0。
现在,我认为可以有第二种情况。就像计数信号量被初始化为1。现在,当进程访问它时,它变成0。下一个等待如果我们写,
while(s <= 0);
然后下一个过程将成为-1。因此,单个进程等待将使信号量值-1。
因此,我可以得出结论,对于-x,x进程是繁忙的等待!
有人能澄清我是对是错吗?任何帮助都是非常感谢的。提前谢谢。
发布于 2016-10-19 18:00:18
计数信号量实现如下:
struct semaphore{
int value;
Queue L;
}
在这里,变量" value“可以将正、负或'0‘作为值,这取决于它的初始值和尝试访问它的进程的数量。变量" value“的初始值指示可以同时访问它的进程数。
wait()方法被实现为:
wait(semaphore s){
s.value--;
if(s.value < 0){
put the process in the queue s.L;
sleep();
}
因此,当一个进程试图访问信号量时,如果该值小于“0”,它将进入休眠状态,因为没有更多的访问资源的权限。
因此,进程尝试访问信号量的次数,其值多次将减少,一旦值变为负值,进程将在等待队列中等待,直到被信号()方法唤醒,使绝对值等于试图访问它的进程数,但没有成功。
https://stackoverflow.com/questions/40136144
复制相似问题