首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >理解信号量上的考试答案

理解信号量上的考试答案
EN

Stack Overflow用户
提问于 2016-05-10 14:58:16
回答 1查看 122关注 0票数 0

这道题是在一次实习考试中提出的。我真的不明白他们是如何得到他们所说的正确答案的。

我希望能得到一些帮助,了解这个问题,以及如何回答它?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-10 15:35:32

我想这一切都是这样的:

等待(P):如果信号量变量的值不是负值,则将其递减1。如果信号量变量现在为负值,则执行等待的进程将被阻塞(即添加到信号量的队列),直到该值大于或等于1。否则,进程在使用了资源的一个单位后继续执行。

来源更多信息

对于正确的答案:

1)由于信号量最初等于0,线程3将阻塞P(S),等待另一个线程执行V(S)。这只会发生在线程1上,并且在A完成之后。因此,无论执行语句A需要多长时间,线程3都将等待指令V(S)的执行。所以A总是在F之前被执行。

2)同样的概念适用于B和G,在G执行P(T)之前,这将等待指令V(T)。只有在执行B之后才会发生这种情况。

3),因为A在F之前执行,如(1)所示,而F总是在G之前执行,A总是在G之前执行。

至于不正确的答案:

(a)在E之前执行A?也许,但不总是这样。因为线程1和线程2必须等待信号量,所以线程2可以比A更快地执行B、V(T)和E,因此在这种情况下,句子(a)是假的。

(b)在F之前执行B?也许,但不总是这样。为什么?要执行F,线程3只依赖线程1(信号量S),因此C和A可以非常快地执行,然后转到F,而B可以仍然执行,因为它非常慢。

D )在D之前执行C?也许,但不总是这样。同样,C可能需要很长时间才能执行,而线程1 (因为它不必等待任何信号量)可以在C完成之前非常快地执行它的所有指令。

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

https://stackoverflow.com/questions/37142190

复制
相关文章

相似问题

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