Win32 APIを使用してjavaのような同期(モニター)を実装するにはどうすればよいですか?
-
05-07-2019 - |
質問
各Javaオブジェクト(およびそのクラス)にはモニターが関連付けられています。 pthreadの用語では、Javaモニターはリエントラントmutexと条件変数の組み合わせに相当します。
ロックのために、Win32 APIはMutexオブジェクト(リエントラントではあるが重い)とクリティカルセクション(リエントラントではないが軽量)を提供します。また、セマフォやイベントなどの他の同期構造も提供しますが、条件変数の明示的な概念はありません。
JVMを記述している場合、これらのWin32の概念を使用してJavaモニターを実装するにはどうすればよいですか?
解決
ご覧ください Win32でPOSIX条件変数を実装するための戦略。
他のヒント
WindowsにはSignalObjectAndWait()があり、これはモニターの条件変数の待機と非常によく似ています。 Event(つまりReset)とMutexを使用してから、PulseEvent()を使用して、条件変数のシグナリングと同等の操作を実行できます。
OpenJDK ソースを見て、クラスReentrantLockの実装方法を確認することをお勧めします。
(自分でチェックしていないので、答えがわからない)
util.concurrentロックは、ネイティブAPIを使用して実装されます。
所属していません StackOverflow