2008-10-06 61 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()來執行等同於發送條件變量的信號。