这道题是在一次实习考试中提出的。我真的不明白他们是如何得到他们所说的正确答案的。
我希望能得到一些帮助,了解这个问题,以及如何回答它?
谢谢!
发布于 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完成之前非常快地执行它的所有指令。
https://stackoverflow.com/questions/37142190
复制相似问题