Concurrencia y sincronización

Solo disponible en BuenasTareas
  • Páginas : 7 (1507 palabras )
  • Descarga(s) : 9
  • Publicado : 28 de abril de 2010
Leer documento completo
Vista previa del texto
1. Introducción

El objetivo de esta primera práctica es la resolución de un problema de concurrencia del tipo lector/escritor, concretamente del problema de oferta y demanda de billetes en una serie de trayectos.

Para simular la oferta y demanda de billetes, se ha creado un hilo por cada una de las órdenes que aparecen en el fichero de entrada a la aplicación.

Estos hilos debencomunicarse entre sí para garantizar el acceso exclusivo de cada uno de ellos a los recursos que así lo requieran, en nuestro caso la lista de trayectos que va a realizar el coche.

Para solucionar los problemas de concurrencia, se ha recurrido dos de las clases colgadas en la página Web, la interfaz ReadWrite.java y a la clase que la implementa: ReadWritePriority.java. Utilizando los mecanismos desincronización de estas dos clases se ha garantizado la exclusividad de las operaciones de escritura respecto a las demás operaciones concurrentes.

2. Concurrencia y sincronización

El recurso a compartir por todos los hilos va a ser un array de objetos de tipo Trayecto.
La longitud del array viene determinada en los argumentos pasados al método main. Habrá que garantizar que no se producenproblemas de sincronización al acceder a cada posición del array.

Cada una de las operaciones concurrentes va a ser ejecutada por un hilo, que va a dormirse hasta que llegue su momento de ejecución (que viene determinado en el fichero de entrada). Al activarse, el hilo va a cumplir su tarea, informar al usuario y finalizar.

Para simular los tiempos de lectura y escritura, cada uno de los hilosde dormirá durante el tiempo especificado tras realizar su tarea y antes de informar del resultado de la operación.

Cada trayecto va a tener asociado una instancia de la clase ReadWritePriority, a la que llamaremos cerradura, y sobre el que se invocarán los métodos para adquirir y liberar recursos

En esta práctica aparecen seis operaciones básicas, ofertar un trayecto, retirarlo, asignar unaplaza, cancelar una reserva, buscar la disponibilidad de un determinado trayecto y listar todos los trayectos existentes.

Operaciones de lectura

Son buscar y listar:

Para la búsqueda, el hilo invocará al método acquireRead sobre la cerradura correspondiente al proyecto cuya disponibilidad quiere consultar. Este método permitirá al hilo acceder al trayecto cuando no haya ninguna operaciónde escritura sobre él.

Una vez terminada la operación, se liberará el recurso invocando al método releaseRead.

La orden listar va a tener un funcionamiento algo distinto a las demás. Teniendo en cuenta que el objeto de esta orden es conseguir una idea global de cómo se encuentran todos los trayectos en un determinado instante de tiempo, se ha implementado de manera que el hilo invoca aadquireRead sobre la cerradura de todos los trayectos, y es después de haberlos leído todos cuando se liberan todas las cerraduras con releaseRead.

De esta manera, ninguna orden de escritura interfiere con los trayectos en mitad del proceso de listado.

Operaciones de escritura

Son ofertar, retirar, asignar y cancelar.

Para ofertar un trayecto, el hilo invocará a la orden acquireWrite sobrela cerradura del trayecto a ofertar, esto es posible porque la orden ofertar no crea una instancia de trayecto (esta instancia se ha creado previamente), sino que inicializa sus atributos con los valores seleccionados.

El método acquireWrite va a permitir acceder al proyecto cuando no haya ninguna operación (ni de lectura ni de escritura) sobre él. Después de ofertar el nuevo trayecto, elhilo va a invocar a releaseWrite para liberar el trayecto.

En caso de que se haya llegado al número máximo de trayectos (especificado en el fichero de entrada), sólo se podrá ofertar uno nuevo si se retira alguno de los ya existentes, en caso contrario el sistema informará del error y no ofertará ningún viaje.

El funcionamiento de las demás órdenes de escritura es igual, invocando los métodos...
tracking img