Antes de empezar, complete el Ejercicio 1.2 Recopilar datos de hebra.
La vista Hebra visualiza el estado de todas las hebras de la aplicación e indica explícitamente puntos muertos y contiendas de hebras.
Para buscar cuellos de botella:
Lo que nos interesa son las flechas verticales entre hebras. Una flecha indica que una hebra (la hebra en la que se origina la flecha) está esperando otra hebra (la hebra a la que señala la flecha) para liberar un bloqueo. Una flecha doble indica que hay dos hebras en un estado de punto muerto, esperando cada una a que la otra libere un bloqueo.
Poco después del inicio del programa, se crean cuatro hebras philo*, una después de la otra. Cada hebra se ejecuta brevemente y después solicita un bloqueo. Las peticiones no pueden satisfacerse. Cuando las tres primeras peticiones de bloqueo fallan, las hebras entran en estado Esperando bloqueo. Cuando la petición de bloqueo de la cuarta hebra falla, se produce un punto muerto y la pantalla indica que las cuatro hebras están en estado de Punto muerto.
Las hebras philo* están esperando un bloqueo de otras hebras philo* que
también esperan un bloqueo. En este caso, tenemos un punto muerto: el programa alcanza un callejón
sin salida y no puede continuar.
Nota: puede ver información específica acerca de las peticiones de bloqueo, los puntos
muertos y otros estados poniendo el cursor sobre un segmento de hebra determinado. Esto visualiza
una ayuda en línea que especifica, por ejemplo el nombre de un bloqueo e identifica la hebra
que mantiene el bloqueo (la "Hebra de bloqueo").
Ahora que entiende por qué se produce este punto muerto, está preparado para comenzar el Ejercicio 1.4: Resolver el cuello de botella de hebras.