1

最近在课堂上学习了同步,对信号和广播的区别有点疑惑。我知道信号,当它发生时,它会唤醒等待列表中的第一个线程。该线程将在信号线程解锁后申请锁。那么广播会发生什么?当广播被调用时,所有等待线程都被唤醒。那么当广播线程解锁时,这些线程中的哪一个会获得那个锁呢?

4

1 回答 1

1

所有线程都未阻塞。他们都试图获得锁。无论哪个成功,首先从其wait持有锁的函数中返回。当该线程稍后释放锁时,仍在尝试获取它的线程之一将获得它。

在实践中,我怀疑在广播中,操作系统将直接移动等待列表并将其添加到等待获取锁的线程列表中(如果它按优先级对此类列表进行排序,则考虑优先级)。但这是一个实现细节。

于 2013-02-28T11:00:00.850 回答