Question

Chaque objet Java (et sa classe) est associé à un moniteur. En termes de lecture, un moniteur Java équivaut à la combinaison d’un mutex réentrant et d’une variable de condition.

Pour le verrouillage, l'API Win32 fournit des objets Mutex (qui sont réentrants mais de poids lourd) et des sections critiques (qui sont non réentrants mais légers). Il fournit également d’autres constructions de synchronisation telles que les sémaphores et les événements, mais n’a pas de concept explicite de variable de condition.

Si j'écrivais une machine virtuelle, comment utiliser ces concepts Win32 pour implémenter les moniteurs Java?

Était-ce utile?

Autres conseils

Windows a SignalObjectAndWait () qui peut être utilisé comme une attente sur une variable de condition dans un moniteur. Vous pouvez utiliser un événement (c'est-à-dire réinitialiser) et un mutex, puis utiliser PulseEvent () pour effectuer l'équivalent de la signalisation de la variable de condition.

Je vous suggère de consulter la source OpenJDK pour voir comment la classe ReentrantLock a été implémentée.

(Je n'ai pas vérifié moi-même, donc je ne suis pas sûr de la réponse).

les verrous util.concurrent sont implémentés à l'aide de l'API native.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top