2010-10-17 12 views
5

supongamos que tenemos una máquina multiprocesador y una aplicación multihilo. Si dos hilos tienen acceso a un método sincronizado y se ejecutaron al mismo tiempo, ¿qué hilo obtendrá el bloqueo? o ¿qué pasará?¿Qué hilo obtendrá el bloqueo?

Gracias

+0

Supongo que VM tendrá que arrojar una moneda. –

+0

Algo relacionado con http://stackoverflow.com/questions/3940164/java-waiting-on-synchronized-block-who-goes-first – Thilo

+0

¿Eso significa que la máquina virtual tiene permitido matar de hambre a un hilo si ambos hilos intentan adquirir el bloquear en un bucle? –

Respuesta

2

El punto es que no existe tal cosa como "al mismo tiempo". Uno de los dos obtendrá el candado, pero no tienes forma de saber cuál.

No existe tal cosa "al mismo tiempo" porque, en términos generales, un bloqueo es algo que elige y ejecuta los hilos uno por uno exclusivamente.

Esto se logra naturalmente en un sistema de monoprocesador puro que puede ejecutar una instrucción a la vez. En sistemas multiprocesador, generalmente hay algún dispositivo de hardware que "bloquea" los procesadores para evitar que se ejecuten al mismo tiempo.

+1

¿Por qué no "al mismo tiempo"? –

+0

¿Por qué no sería algo así como "al mismo tiempo". Estamos hablando de un hardware multiprocesador ... – aioobe

+0

Pero el código que está administrando el bloqueo debe ser serializado de alguna manera. – Thilo

9

El comportamiento será no determinista (es decir, o hilo puede obtener el bloqueo), y puede variar de ejecución a ejecución. Esto se debe a que depende de la implementación de JVM específica y de la programación particular de sus hilos.

De acuerdo con este artículo la especificación JVM pone ninguna restricción en la equidad:

imparcialidad
El modelo de memoria de Java no especifica ningún requisito de equidad para hilos o preventivo multi-threading. Un hilo puede negarse a entregar la CPU a otro hilo y poner el sistema en punto muerto. Las reglas de equidad para otros hilos están definidas por las implementaciones de JVM individuales.

Es decir, a menos que sincronice cuidadosamente su programa, un subproceso teóricamente puede ser anulado por el planificador.

+2

Tampoco creo que haya ningún "al mismo tiempo" en ese nivel. Un hilo obtendrá la cerradura, solo en virtud de llegar allí primero. No es necesario lanzar una moneda. – Thilo

+0

Sí, estoy de acuerdo ... – aioobe

Cuestiones relacionadas