Domanda

Ogni oggetto Java (e la sua classe) ha un monitor associato. In termini pthread, un monitor Java equivale alla combinazione di un mutex rientrante e una variabile di condizione.

Per il blocco, l'API Win32 fornisce oggetti Mutex (che sono rientranti ma pesanti) e sezioni critiche (che sono non rientranti ma leggeri). Fornisce anche altri costrutti di sincronizzazione come semafori ed eventi, ma non ha un concetto esplicito di una variabile di condizione.

Se stavo scrivendo una JVM, come potrei usare questi concetti Win32 per implementare i monitor Java?

Altri suggerimenti

Windows ha SignalObjectAndWait () che può essere usato in modo molto simile a un'attesa su una variabile di condizione in un monitor. Puoi usare un evento (che è Reset) e un Mutex e quindi usare PulseEvent () per fare l'equivalente della segnalazione della variabile di condizione.

Ti suggerisco di dare un'occhiata alla OpenJDK per vedere come è stata implementata la classe ReentrantLock.

(Non l'ho verificato da solo, quindi non sono sicuro della risposta).

i blocchi util.concurrent sono implementati usando l'API nativa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top