了解信号量的考试答案

时间:2016-05-10 14:58:16

标签: semaphore

这个问题出现在练习考试中。我真的不明白他们如何得到他们认为正确的答案。

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

enter image description here

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为一切都是这样的:

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

SourceMore information

正确答案:

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) A在E之前执行?也许,但并非总是如此。因为线程1和线程2必须等待信号量,所以线程2可以比A快地执行B,V(T)和E,所以在这种情况下句子(a)是假的。

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

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