1

互斥锁用于保护临界区。假设已经对互斥体执行了向下操作,而执行该操作的线程在 CS 中,其他 10 个线程紧随其后,对互斥体执行向下操作,使自己进入睡眠状态。当第一个线程退出临界区并在互斥体上执行 up 时,是否所有 10 个线程都唤醒并恢复它们将要执行的操作,即进入临界区?这是否意味着所有 10 个可能会同时进入临界区?

4

1 回答 1

1

不,只有一个线程会唤醒并获得互斥锁的所有权。其余的人将保持睡眠状态。哪个线程被唤醒通常是不确定的。

以上是一个概括,每个系统的实现细节会有所不同。例如,在 Java 中比较Object#notify()Object#notifyAll()

于 2011-03-17T22:18:01.113 回答