如果进程调用在信号量上发出信号,将会发生什么。
假设信号量为3。进程P1,P2,P3调用了信号量等待程序,并进入了临界区。 P4,P5,P6也称为wait,但是由于信号量计数已经为0,因此它们将在信号量的等待队列中等待。 现在P7来了,并调用了signal(),进程(P4,P5或P6)是否会等待信号灯醒来?它被唤醒,然后是一个错误,因为信号量为2,但是p1,p2和p3尚未离开临界区。
答案 0 :(得分:0)
只有正在睡眠的线程之一(P4,P5和P6中的一个)将被唤醒。您说信号量是2,但实际上是1,对吧?
此行为是正确的,因为P7调用了signal
。任何线程都可以在信号量上调用signal
,即使它最初并未在信号量上调用wait
。这与互斥锁不同,互斥锁具有所有权的概念(例如,如果线程从未在互斥锁上调用unlock
,则该线程无法在互斥锁上调用lock
)。 / p>