如何使用Win32 API实现类似Java的同步(监视器)?

问题描述 投票:0回答:2

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

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

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

multithreading winapi mutex monitor condition-variable
2个回答
2
投票

Windows具有SignalObjectAndWait(),可像在监视器中等待条件变量一样使用。您可以使用一个事件(即Reset)和一个互斥对象,然后使用PulseEvent()等效于用信号发送条件变量。


0
投票

我建议您看一下OpenJDK源,以了解如何实现ReentrantLock类。

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

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


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.