2008-10-06 59 views
1

每个Java对象(及其类)都有一个关联的监视器。在pthread术语中,Java监视器相当于可重入互斥和条件变量的组合。如何使用Win32 API实现类似于java的同步(监视器)?

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

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

回答

0

我建议你看看OpenJDK源代码,看看ReentrantLock是如何实现的。

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

util.concurrent锁是使用本地API实现的。

+0

在Windows上,它使用本机API而不是Java监视器来实现。 – 2008-10-07 06:57:33

+0

我会看看。谢谢。 – 2008-10-07 10:10:52

2

Windows有SignalObjectAndWait(),它可以非常像监视器中的条件变量的等待。您可以使用事件(即重置)和互斥锁,然后使用PulseEvent()来执行等同于发送条件变量的信号。