Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Boletín de Practicas PCD Junio 2023-Ej1

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 6

PROGRAMACIÓN CONCURRENTE Y DISTRIBUIDA

BOLETÍN DE PRÁCTICAS

CONVOCATORIA DE JUNIO
CURSO 2022-2023
Contenido
ENTREGABLES ................................................................................................ 1

FORMATO DE LOS DOCUMENTOS ............................................................ 1

EVALUACIÓN ................................................................................................... 2

EJERCICIOS ...................................................................................................... 3

EJERCICIO 1: INTRODUCCIÓN A LA PROGRAMACIÓN CONCURRENTE. ................. 3


Entregables
La entrega constará de un único proyecto conteniendo 4 paquetes (uno para cada
ejercicio) que se comprimirá en un fichero .zip y una memoria de prácticas en formato PDF.
Los ejercicios se implementarán en Java 8 o una versión superior usando la codificación de
caracteres UTF-8 (Project-Resource-Textfileencoding-Other-UTF-8). Tanto el código fuente
como la memoria se entregarán a través de una tarea que será creada en el AULA
VIRTUAL. No se admitirán entregas realizadas por otros medios.
En la memoria escrita se deben incluir necesariamente para cada ejercicio los
siguientes apartados:
• Recursos no compartibles. Los que se hayan identificado en el problema.
• Condiciones de sincronización. Las detectadas en el problema.
• Pseudocódigo. El de los diferentes hilos y monitores que intervengan en la
solución.
• Cuestiones planteadas en los ejercicios.

Formato de los documentos


La memoria de prácticas deberá estar escrita correctamente en sus aspectos ortográfico
y gramatical, evitando el uso de vulgarismos y lenguaje SMS. Las páginas deberán estar
numeradas y se debe incluir un índice. El tipo de letra utilizado para el texto normal será
Times New Román (o semejante) en 12 puntos y en color negro. El interlineado será sencillo.
Los listados de código deberán estar formateados cuidando varios aspectos:
• Indentación.
• Tamaño de la letra adecuado para que no se corten los renglones, o cuando esto
ocurra el código siga siendo legible y ordenado.
• Tipo de letra de paso fijo (Courier o semejante) en color negro.
Además, el código fuente entregado debe estar debidamente comentado tanto en los
bloques de código más relevantes en relación con la programación concurrente y distribuida
como mediante el uso de Javadoc para las clases y métodos desarrollados.
En la portada de la memoria de prácticas deberá aparecer arriba a la derecha la
siguiente información: Apellidos, Nombre, Asignatura, Grupo y Subgrupo de Prácticas,
Convocatoria, Año académico y Profesor.

1
Evaluación

La evaluación constará de dos partes principales: la corrección de las prácticas


entregadas y la defensa de las mismas en una entrevista personal. Las prácticas se realizarán
individualmente.

Como criterios de evaluación se tendrán en cuenta los siguientes:


• Corrección de las soluciones aportadas.
• Grado de concurrencia
• Entrevista de prácticas
• Claridad en la explicación (memoria de prácticas)
• Originalidad.

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.

También podría gustarte