Boletín de Practicas PCD Junio 2023-Ej1
Boletín de Practicas PCD Junio 2023-Ej1
Boletín de Practicas PCD Junio 2023-Ej1
BOLETÍN DE PRÁCTICAS
CONVOCATORIA DE JUNIO
CURSO 2022-2023
Contenido
ENTREGABLES ................................................................................................ 1
EVALUACIÓN ................................................................................................... 2
EJERCICIOS ...................................................................................................... 3
1
Evaluación
La copia de prácticas será motivo de suspenso para todos los participantes implicados.
La no asistencia (injustificada) a la entrevista de prácticas será motivo de suspenso de
las mismas.
Este boletín se compone de cuatro ejercicios que serán valorados por el profesor con
una puntuación de 0 a 10 cada uno. Para superar la parte práctica será necesario sacar una nota
igual o superior a 5 en cada uno de ellos. Cuando todos los ejercicios estén superados la
ponderación aplicada será la siguiente: 0.25*E1 + 0.25*E2 + 0.25*E3 + 0.25*E4. La fecha
límite para la entrega del boletín de prácticas será el 07 mayo de 2023 a las 23:00 horas.
2
Ejercicios
Ejercicio 1: Introducción a la programación concurrente.
Supongamos dos hilos con la siguiente funcionalidad: uno se dedica a generar una
matriz A de valores enteros de tamaño 3x3, calcular el cuadrado de dicha matriz (A2) e
imprimir en pantalla:
AxA
a1 a2 a3 a1 a2 a3
a4 a5 a6 x a4 a5 a6
a7 a8 a9 a7 a8 a9
A2
r1 r2 r3
r4 r5 r6
r7 r8 r9
El otro hilo hace lo mismo pero en lugar de calcular A2, calcula A+A y por lo tanto
imprime en pantalla:
A+A
a1 a2 a3 a1 a2 a3
a4 a5 a6 + a4 a5 a6
a7 a8 a9 a7 a8 a9
2A
r1 r2 r3
r4 r5 r6
r7 r8 r9
Para que se impriman de forma lenta, entre cada línea, usaremos el método Sleep(1000) de
Java.
El hilo principal, una vez hayan finalizado todos los hilos, imprimirá en pantalla: “FIN DEL
PROGRAMA”.
La actividad anterior la repite cada hilo 10 veces. Desarrollar un programa concurrente
en Java que resuelva el problema anterior. Para resolver la sincronización necesaria entre los
hilos se usarán los cerrojos de la clase ReentrantLock.
a) (1 punto sobre 10) Antes de usar la clase ReentrantLock en el problema comprueba
y explica cómo es la salida en pantalla y qué problemas observas.
b) (1 punto sobre 10) Después de usar la clase ReentrantLock en el problema para
corregir la salida, comprueba y explica cómo es esta salida en pantalla.
3
c) (1 punto sobre 10) Si tras usar ReentrantLock eliminas el uso de Sleep(), el orden
en el que los hilos usan la pantalla repitiendo la ejecución varias veces ¿es siempre
el mismo? ¿es correcto que ese orden varíe en cada ejecución? Justifica la
respuesta.
d) (1 punto sobre 10) Indica qué acciones puedes llevar a cabo para comprobar que no
se producen problemas debido a la concurrencia en el programa desarrollado, por
ejemplo, para forzar distintas mezclas de los códigos de los procesos. Justifica la
respuesta.