Title | AST - Práctica 2. SyncABs - Intro Concurrencia (Memoria paso a paso) |
---|---|
Course | Aplicaciones y Servicios Telemáticos |
Institution | Universitat Politècnica de Catalunya |
Pages | 4 |
File Size | 374.8 KB |
File Type | |
Total Downloads | 104 |
Total Views | 150 |
Práctica 2 AST Sincronizas As y Bs por pantalla....
Javier de la Rica Palma
AST: Práctica 2
_
INTRODUCCIÓN A LA CONCURRENCIA HILOS DE EJECUCIÓN Y SINCRONIZACIÓN BÁSICA CON ESPERA ACTIVA 1. Realizar un programa con dos threads, en el que uno de los threads imprima letras A por pantalla y el otro thread imprima letras B. ¿Qué se observa?
Podemos observar que se imprimen letras A y letras B aleatoriamente, sin ningún orden: ABBBBBBAAAABBABABBAAAABBB […]
Javier de la Rica Palma
AST: Práctica 2
_
2. Utilizar el método sleep() de la clase Thread para modificar el programa de forma que las letras A y B se impriman de forma intercaladas una a una: A B A B A B A B A B A B A B A B […] ¿Qué se observa? ¿Se consigue un intercalado perfecto? Comprobarlo guardando la salida en un fichero: java ABsleep > /tmp/ABsleep.log y ejecutando el script sed n ‘H;x;s/\(.\1/\0\n--/p’ /tmp/ABsleep.log Si sale alguna cosa por la consola es que hay alguna A o B que se repite.
Podemos observar como a la salida obtenemos las letras A y B intermitentemente, pero en algunos momentos nos encontramos letras repetidas.
Javier de la Rica Palma
AST: Práctica 2
_
3. Hallar un entrelazado que justifique el comportamiento anómalo del apartado anterior. ¿Cómo conseguiríais evitar que salgan A’s o B’s repetidas utilizando únicamente sleep()? Para concluir: ¿es sleep() un buen mecanismo para conseguir la alternancia de letras? ¿Por qué? Podríamos poner un tiempo de “espera” mayor, en vez de 500, 1000ms: sleep(1000). De ésta manera el procesador debe esperar en cada turno y no van pasando uno a uno. De todos modos, éste no es un buen método ya que es muy lento. (Debe pasar 1 segundo entre impresión e impresión).
4. Resolver el apartado anterior utilizando una variable simple compartida que en un estado permite escribir A y en el otro B. Haced servir la plantilla siguiente programando a clase auxiliar necesaria.
Javier de la Rica Palma
AST: Práctica 2
La clase Flag es la que nos sirve para compartir la misma variable en ambos threads.
_...