0

每个 Java 对象(及其类)都有一个关联的监视器。在 pthread 术语中,Java 监视器等同于可重入互斥锁和条件变量的组合。

对于锁定,Win32 API 提供 Mutex 对象(可重入但重量级)和关键部分(不可重入但轻量级)。它还提供了其他同步结构,例如信号量和事件,但没有明确的条件变量概念。

如果我正在编写一个 JVM,我如何使用这些 Win32 概念来实现 Java 监视器?

4

2 回答 2

2

Windows 有 SignalObjectAndWait() ,它的使用非常类似于在监视器中等待条件变量。您可以使用一个事件(即重置)和一个互斥锁,然后使用 PulseEvent() 来做相当于发送条件变量的信号。

于 2009-02-10T21:13:51.243 回答
0

我建议您查看OpenJDK源代码,了解 ReentrantLock 类是如何实现的。

(我自己没有检查过,所以我不确定答案)。

util.concurrent 锁是使用原生 API 实现的。

于 2008-10-06T14:36:00.413 回答