Trabajo Práctico

Técnicas de Programación Concurrente

WeatherMulator

Autores:

Leandro Lucarella 77891

Nicolás Dimov 77624

Ricardo Markiewicz 78226

Introducción:

El sistema simula el monitoreo de un centro que mide algunas variables climatológicas como ser, temperatura, humedad, presión, velocidad y dirección del viento, presentandolas en una interfaz gráfica para comodidad del usuario.

Objetivo:

Para realizar esta tarea, se simularon los sensores siguiendo el diseño propuesto y utilizando las técnicas de programación concurrente adecuadas para solucionar el tipo de problemas que se presentan.

Desarrollo e Implementación:

Se ha utilizado la siguiente estructura de clases:

Y se han implementado los sensores correspondientes para la implementación del sistema.

Cada sensor funcionará como un hilo de ejecución independiente el cual genera sus propios valores aleatorios simulando una medición real.

Tendremos cinco tipos de sensores que medirán las distintas magnitudes climatológicas:

Temperatura

Humedad

Velocidad del Viento

Dirección del Viento

Presión

Cada uno de estos sensores tiene la capacidad de almacenar una serie de datos estadísticos permitiendo hallar los máximos y mínimos en un período de tiempo.

Para cumplir esta tarea, en cada sensor deben realizarse escrituras y lecturas de estos valores concurrentemente, por lo cual debemos indicar a la aplicación que el método encargado de realizar dicha tarea debe leer o escribir estos datos sin que otro proceso o método lo haga simultaneamente.

Para obtener este efecto, los métodos actualizarHistorial, getMin y getMax de la clase SensorHistorico, son modificados por el decorador @syncronized, cuya función es indicarle a la aplicación que esa porcion de código solo puede ser accedida por un solo hilo de ejecución a la vez, con lo cual, se garantiza la exclusión mutua para ese método.

De forma similar se comportan los atributos valorMinimo y valorMaximo de la clase SensorHistorico, solo que en este caso son “propiedades”, es decir, utilizan una función en cada operación de lectura o escritura, y estas últimas estan implementadas con candados sobre el valor del atributo para que no sea leído y escrito al mismo tiempo cuando se actualizan los valores históricos.

2005-10-17T22:55:48