当信号量上的过程调用信号时会发生什么?

时间:2019-01-10 17:13:44

标签: operating-system mutex semaphore critical-section

如果进程调用在信号量上发出信号,将会发生什么。

假设信号量为3。进程P1,P2,P3调用了信号量等待程序,并进入了临界区。 P4,P5,P6也称为wait,但是由于信号量计数已经为0,因此它们将在信号量的等待队列中等待。 现在P7来了,并调用了signal(),进程(P4,P5或P6)是否会等待信号灯醒来?它被唤醒,然后是一个错误,因为信号量为2,但是p1,p2和p3尚未离开临界区。

1 个答案:

答案 0 :(得分:0)

只有正在睡眠的线程之一(P4,P5和P6中的一个)将被唤醒。您说信号量是2,但实际上是1,对吧?

此行为是正确的,因为P7调用了signal。任何线程都可以在信号量上调用signal,即使它最初并未在信号量上调用wait。这与互斥锁不同,互斥锁具有所有权的概念(例如,如果线程从未在互斥锁上调用unlock,则该线程无法在互斥锁上调用lock)。 / p>