计数信号量的值为 -x。有多少个等待进程?
A counting semaphore has value -x. How many number of waiting processes are there?
我的书上写的答案是 x。
但这怎么可能呢?
我刚从 Differnce between Counting and Binary Semaphores 那里了解到,计数信号量具有正值,因此多个进程可以访问临界区。因此,在那种情况下 - 怎么能说 x 个进程正在等待,因为在到达 0 时,下一个等待信号将忙于等待一个进程并且信号量值永远不会小于 0。
现在,我认为可能是第二种情况。就像计数信号量初始化为1。现在,当一个进程访问它时,它变为0。接下来等待如果我们写,
while(s <= 0);
然后下一个过程将使其-1。因此,单个进程等待使信号量值为-1。
因此我可以得出结论,对于 -x,x 个进程正在忙等待!
有人可以澄清我是对还是错吗?任何帮助表示赞赏。提前致谢。
计数信号量实现如下:
struct semaphore{
int value;
Queue L;
}
这里变量 "value" 可以取 positive , negative 或 '0' 作为值,这取决于它的初始值和尝试访问它的进程数。
变量的初始值 "value" 告诉可以同时访问它的进程数。
wait() 方法实现为:
wait(semaphore s){
s.value--;
if(s.value < 0){
put the process in the queue s.L;
sleep();
}
因此,当进程尝试访问信号量时,如果该值小于“0”,它将进入休眠状态,因为没有更多权限可以访问该资源。
因此,进程尝试访问信号量的次数,它的值将被递减,一旦值变为负数,进程将在等待队列中等待,直到被 signal() 方法唤醒,使绝对值等于尝试访问它但未成功的进程数。
我的书上写的答案是 x。
但这怎么可能呢? 我刚从 Differnce between Counting and Binary Semaphores 那里了解到,计数信号量具有正值,因此多个进程可以访问临界区。因此,在那种情况下 - 怎么能说 x 个进程正在等待,因为在到达 0 时,下一个等待信号将忙于等待一个进程并且信号量值永远不会小于 0。
现在,我认为可能是第二种情况。就像计数信号量初始化为1。现在,当一个进程访问它时,它变为0。接下来等待如果我们写,
while(s <= 0);
然后下一个过程将使其-1。因此,单个进程等待使信号量值为-1。
因此我可以得出结论,对于 -x,x 个进程正在忙等待!
有人可以澄清我是对还是错吗?任何帮助表示赞赏。提前致谢。
计数信号量实现如下:
struct semaphore{
int value;
Queue L;
}
这里变量 "value" 可以取 positive , negative 或 '0' 作为值,这取决于它的初始值和尝试访问它的进程数。
变量的初始值 "value" 告诉可以同时访问它的进程数。
wait() 方法实现为:
wait(semaphore s){
s.value--;
if(s.value < 0){
put the process in the queue s.L;
sleep();
}
因此,当进程尝试访问信号量时,如果该值小于“0”,它将进入休眠状态,因为没有更多权限可以访问该资源。
因此,进程尝试访问信号量的次数,它的值将被递减,一旦值变为负数,进程将在等待队列中等待,直到被 signal() 方法唤醒,使绝对值等于尝试访问它但未成功的进程数。