首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计数信号量具有值-x。有多少个等待过程?

计数信号量具有值-x。有多少个等待过程?
EN

Stack Overflow用户
提问于 2016-10-19 15:47:33
回答 1查看 1.6K关注 0票数 0

我的书上说的答案是x。

但这怎么可能?我刚刚从Differnce between Counting and Binary Semaphores了解到,计数信号量具有正的价值,因此多个进程可以访问关键部分。因此,在这种情况下--怎么能说x进程在等待,因为当到达0时,下一个等待信号将繁忙--等待一个进程,信号量的值永远不会小于0。

现在,我认为可以有第二种情况。就像计数信号量被初始化为1。现在,当进程访问它时,它变成0。下一个等待如果我们写,

代码语言:javascript
运行
复制
while(s <= 0);

然后下一个过程将成为-1。因此,单个进程等待将使信号量值-1。

因此,我可以得出结论,对于-x,x进程是繁忙的等待!

有人能澄清我是对是错吗?任何帮助都是非常感谢的。提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-19 18:00:18

计数信号量实现如下:

代码语言:javascript
运行
复制
    struct semaphore{
           int value;
           Queue L;
           }

在这里,变量" value“可以将正、负或'0‘作为值,这取决于它的初始值和尝试访问它的进程的数量。变量" value“的初始值指示可以同时访问它的进程数。

wait()方法被实现为:

代码语言:javascript
运行
复制
    wait(semaphore s){
           s.value--;
           if(s.value < 0){
               put the process in the queue s.L;
               sleep();
               }

因此,当一个进程试图访问信号量时,如果该值小于“0”,它将进入休眠状态,因为没有更多的访问资源的权限。

因此,进程尝试访问信号量的次数,其值多次将减少,一旦值变为负值,进程将在等待队列中等待,直到被信号()方法唤醒,使绝对值等于试图访问它的进程数,但没有成功。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40136144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档