2008-10-06 4 views
1

각 Java 오브젝트 (및 해당 클래스)에는 연관된 모니터가 있습니다. pthread 용어에서 Java 모니터는 재진입 뮤텍스와 조건 변수의 조합과 같습니다.Win32 API를 사용하여 Java와 유사한 동기화 (모니터)를 구현하려면 어떻게해야합니까?

잠금을 위해 Win32 API는 뮤텍스 개체 (재진입 성이지만 중량급)와 중요 섹션 (재진입 성이 아니지만 경량)을 제공합니다. 또한 세마포 및 이벤트와 같은 다른 동기화 구성을 제공하지만 조건 변수에 대한 명시 적 개념이 없습니다.

JVM을 작성했다면 Java 모니터를 구현하는 데 어떻게 이러한 Win32 개념을 사용할 수 있습니까?

답변

0

ReentrantLock 클래스가 구현 된 방법을 보려면 OpenJDK 소스를 살펴 보시기 바랍니다.

(본인은 직접 확인하지 않았으므로 확실하지 않습니다.)

util.concurrent 잠금은 원시 API를 사용하여 구현됩니다.

+0

Windows에서는 Java 모니터가 아닌 원시 API를 사용하여 구현됩니다. –

+0

내가 살펴 보겠다. 감사. –

+0

관련 소스 코드를 찾는 데 어려움을 겪고 있습니다. 저를 올바른 방향으로 가르쳐 주시겠습니까? –

2

Windows에는 모니터의 조건 변수 대기와 매우 흡사하게 사용할 수있는 SignalObjectAndWait()이 있습니다. 이벤트 (즉, 재설정) 및 뮤텍스를 사용하고 PulseEvent()를 사용하여 조건 변수에 신호를 보내는 것과 동일한 작업을 수행 할 수 있습니다.

+0

SignalObjectAndWait 및 PulseEvent는 모두 신뢰할 수 없습니다. 특정 조건 하에서는 작동하지 않습니다. SignalObjectAndWait는 원 자성을 보장하지 않습니다. 커널 APC 호출이 발생하면 PulseEvent가 작동하지 않습니다. SignalObjectAndWait와 PulseEvent를 결합하면 재앙이 될 수 있습니다. –