Monitores Ing. Iván Medrano Valencia

Documentos relacionados
Benemérita Universidad Autónoma del Estado de Puebla

Benemérita Universidad Autónoma del Estado de Puebla

PROGRAMACIÓN EN JAVA

Programación Concurrente en Java

Concurrencia. Primitivas IPC con bloqueo

MONITORES EN JAVA. Antonio Tomeu Control de la Concurrencia en Java: API Estándar

Federico Peinado

Java nos ofrece la clase Thread y la interfaz Runable que permiten que varios procesos estén funcionando de forma concurrente.

1 HILOS (THREADS) EN JAVA

Java y JVM: programación concurrente

Concurrencia en Android LSUB, GYSC, URJC

TEMA 5: Control de la Concurrencia en Java (API Estándar)

1 (2 5 puntos) Responda con brevedad y precisión a las siguientes preguntas:

Threads. La plataforma JAVA soporta programas multhreading a través del lenguaje, de librerías y del sistema de ejecución. Dos.

Java: Programación Multithread

dit UPM Tema 3: Concurrencia /ejercicios Análisis y diseño de software José A. Mañas

2.2.- Paradigmas de la POO

Programación Orientada a Eventos

Multitarea en Java. Rafa Caballero - UCM

Concurrencia en Java

1. Manejo de memoria estática 2. Manejo de memoria dinámica

Repaso de las características más importantes de la programación Java y su adaptación a Android

Implementación de monitores POSIX

Concurrencia en Java

Object 1. Threads en Java

Programación concurrente en Java

75-62 Técnicas de Programación Concurrente II 2004 java Threads

Introducción a Java LSUB. 15 de enero de 2015 GSYC

GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C)

Primera Escuela de la Red Temática SVO. Madrid, Noviembre, 2006 JAVA BÁSICO. Raúl Gutiérrez Sánchez LAEFF - INTA raul@laeff.inta.

Solución al Examen de Prácticas de Programación (Ingeniería Informática)

FACULTAD DE INGENIERÍA

Sockets en Java. Prof. Wílmer Pereira Universidad Simón Bolívar

Programación Concurrente y Paralela. P(S) ; sección crítica P(S);

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante)

Secretos de la Programación Concurrente

UNIVERSIDAD AUTÓNOMA DE YUCATÁN FACULTAD DE MATEMÁTICAS MISIÓN

Arquitecturas cliente/servidor

DISEÑO DE UNA ARQUITECTURA CLIENTE/SERVIDOR MEDIANTE OBJETOS DISTRIBUIDOS EN JAVA

BENEMÉRITA UNIVERSIDAD AUTÓNOMA DE PUEBLA EDUCACIÓN MEDIA SUPERIOR

Compiladores e Intérpretes Proyecto N 1 Sintaxis de MiniJava Segundo Cuatrimestre de 2015

CDI Exclusión mutua a nivel alto. conceptos

Lo que necesitaremos para programar en Java, será un editor de texto o IDE y la JDK.

El lenguaje de programación Java

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

Introducción a la Programación Orientada a Objetos

SOLUCION PARCIAL TASK SCHEDULER. Task Scheduler

Partes de un programa en Java. A. Ejemplo de un Programa en Java /* Programa Ejemplo de Java: Muestra una Ventana Archivo: Ejemplo1.

Conceptos fundamentales de la POO. Fundamentos de la Programación Orientada a Objetos Objetos y Clases

Programación Orientada a Objetos. Java: Excepciones

Arquitectura Cliente/Servidor. Invocación de Métodos Remotos RMI: Remote Method Invocation. Llamadas a Métodos Remotos

Concurrencia: deberes. Concurrencia: Exclusión Mutua y Sincronización. Concurrencia. Dificultades con la Concurrencia

GUÍA DE LABORATORIO 5 ARREGLOS DE UNA DIMENSIÓN

Notación UML para modelado Orientado a Objetos

Sesión 8 Sensor de Ultrasonido

Si bien Pascal-FC no trae algunas de las características de Pascal como:

Sistemas Operativos Práctica 4

3.9 Patrón Distributed callback

Tema 2. El lenguaje de programación Java (Parte 1)

Práctica 4: Java Remote Method Invocation (RMI)

Hilos en Java. Crear un Hilo. Detener un hilo. Fuente:

Programación orientada a objetos

Ejercicio 1 (3 puntos).-

Programación Concurrente. Curso Java 2012, 2013 Juan Manuel Fernández Peña

2. Indica cuál de las siguientes afirmaciones es cierta:

Trabajo Práctico N 4: Diseño por Contratos

Ingeniería Superior de Informática. Curso 3º. Sistemas Operativos. Examen Final. TEORÍA. 31 de Enero de 2005

Programación Java. Práctica 11. Javier García de Jalón José Ignacio Rodríguez Alfonso Brazález Alberto Larzabal Jesús Calleja Jon García

Sistemas Operativos Práctica 3

CAPÍTULO 8. Comunicación y sincronización basada en variables compartidas

Sistemas Operativos Temas 4, 5 y 6. Jorge García Duque Despacho: B-202 Tutorías: Lunes 16:00-18:00 y Martes 16:00-20:00

Programación Orientada a Objetos en Java

Práctico de Procesos, Hilos y Deadlock

Cada examen debe superarse con al menos un 4 para hacer media.

Universidad de Cantabria

CONCEPTOS BASICOS DEL LENGUAJE JAVA

Java y JVM: programación concurrente. Adolfo López Díaz

un programa concurrente

4. Programación Paralela

POLIMORFISMO "una interfaz, múltiples métodos".

Tema 6. Reutilización de código. Programación Programación - Tema 6: Reutilización de código

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Elementos léxicos del lenguaje de programación Java

Receta general para resolver problemas de sincronización con semáforos

PROGRAMACIÓN III (Curso de Adaptación)

Ejercicios del tema 7: Clases y objetos

Programación Orientada a Objetos con Java

Programación Concurrente en Java

Introducción - por qué usarlas?(1)

15. Parámetros o argumentos

Modelo de Objetos Distribuidos

2.1. Introducción al lenguaje Java

Concurrencia en.net David Jesús Horat Flotats

Uso de excepciones en Java

Computación III. Objetivo de aprendizaje del tema

Facultad de Ingeniería Escuela de Ingeniería de Sistemas y Computación Algoritmia y Programación

1. Qué tipos de relación hay entre las siguientes clases?

Modulo 1 El lenguaje Java

Introducción a la programación orientada a objetos y al lenguaje JAVA Colegio Reuven Feuerstein --Javier Navarro

PROGRAMACIÓN CONCURRENTE. Tema 5 Monitores

Transcripción:

Universidad Nacional de San Antonio Abad del Cusco Departamento Académico de Informática Programación Concurrente y Distribuida Práctica 5 1. OBJETIVO. Ing. Iván Medrano Valencia En esta práctica, comprobaremos el desarrollo y uso de los como otro mecanismo que nos permite realizar sincronización y exclusión mutua entre procesos concurrentes. 2. CONCEPTOS ADICIONALES. El utilizar semáforos para sincronizar procesos presenta dos problemas principales. El primero es que las primitivas se encuentran dispersas por todo el código. El segundo es que los semáforos en sí son un mecanismo difícil de programar y depurar. Un problema crítico en este sentido es que se puede ocasionar deadlock si no se revisa cuidadosamente el código. La necesidad de concentrar el acceso al recurso compartido llevó a Brinch-Hansen y Hoare a desarrollar el concepto de Monitor. La idea del monitor se basa en el principio de Tipo Abstracto de Dato y se define como un conjunto de datos (que representa al recurso crítico) y un conjunto de operaciones que manejan los datos. 3. DESARROLLO DE LA PRACTICA Para implementar los monitores utilizaremos las clases que proporciona el paquete java.util.concurrent.locks aplicado al problema de coches y barcos desarrollado en clases teóricas. IMPLEMENTACION DEL MONITOR /*===== MONITOR PUENTE LEVADIZO ===*/ import java.util.concurrent.locks.*; public class CPuenteLevadizo final ReentrantLock cerrojo = new ReentrantLock(); final Condition okcoche = cerrojo.newcondition(); final Condition okbarco = cerrojo.newcondition(); int c,b; public CPuenteLevadizo() b=0; c=0; public void entrarcoche() throws InterruptedException

while ((b>0) (awaited(okbarco)>0)) //hay barco pasando o esperando //--tiene prioridad los barcos System.out.println("coche esperando..puente ocupado"); okcoche.await(); //el coche espera c++; //--incrementa el número de coches pasando okcoche.signal(); //--despierta si hay otro coche esperando //BAJAR PUENTE public void salircoche() throws InterruptedException System.out.println("coche saliendo..puente libre"); c--; //--disminuye el nro. de coches pasando if (c==0) okbarco.signal(); //--el último coche que pasa //--comunica al barco que puede pasar (si //--hubiera) public void entrarbarco() throws InterruptedException while ((c>0)) //--si hay coches pasando System.out.println("barco esperando..puente ocupado"); okbarco.await(); //--esperar a que pasen los coches b++; //--incrementa el no. de barcos pasando okbarco.signal(); //--despierta a otro barco si hubiera //--para que intente pasar //LEVANTAR PUENTE 2

public void salirbarco() throws InterruptedException System.out.println("barco saliendo..puente libre"); b--; //--disminuye el num. de barcos pasando if(b==0) okcoche.signal(); //-- el último barco comunica al coche //--que espera (si hubiera) que puede intentar pasar private int awaited(condition condicion) //--devuelve el número de hilos que esperan sobre la variable condicion return cerrojo.getwaitqueuelength(condicion); IMPLEMENTACION DE LOS HILOS. public class CCoches extends Thread CPuenteLevadizo puentelevadizo; public CCoches(CPuenteLevadizo p_puentelevadizo) puentelevadizo = p_puentelevadizo; public void run() puentelevadizo.entrarcoche(); //--tratar de pasar el puente System.out.println("ENTRO "+getname()); //---PASAR EL PUENTE sleep(100); puentelevadizo.salircoche(); System.out.println("SALIO "+getname()); catch (InterruptedException e) 3

public class CBarcos extends Thread CPuenteLevadizo puentelevadizo; public CBarcos(CPuenteLevadizo p_puentelevadizo) puentelevadizo = p_puentelevadizo; public void run() puentelevadizo.entrarbarco(); //--tratar de pasar el puente System.out.println("ENTRO "+getname()); //---PASAR EL PUENTE sleep(200); puentelevadizo.salirbarco(); System.out.println("SALIO "+getname()); catch (InterruptedException e) IMPLEMENTACION DE LA APLICACIÓN public class AppCochesBarcos public static void main(string arg[]) //--CREAR EL MONITOR CPuenteLevadizo puentelevadizo = new CPuenteLevadizo(); //--CREAR LOS HILOS A LOS QUE SE PASA COMO PARAMETRO EL MONITOR A UTILIZAR CCoches c1 = new CCoches(puenteLevadizo); CBarcos b1 = new CBarcos(puenteLevadizo); CCoches c2 = new CCoches(puenteLevadizo); CBarcos b2 = new CBarcos(puenteLevadizo); CCoches c3 = new CCoches(puenteLevadizo); CBarcos b3 = new CBarcos(puenteLevadizo); CCoches c4 = new CCoches(puenteLevadizo); CBarcos b4 = new CBarcos(puenteLevadizo); CCoches c5 = new CCoches(puenteLevadizo); CBarcos b5 = new CBarcos(puenteLevadizo); //--PONER NOMBRE A LOS HILOS c1.setname("coche 01"); c2.setname("coche 02"); c3.setname("coche 03"); c4.setname("coche 04"); c5.setname("coche 05"); b1.setname("barco 01"); b2.setname("barco 02"); 4

b3.setname("barco 03"); b4.setname("barco 04"); b5.setname("barco 05"); //--EJECUTAR LOS HILOS c1.start(); b1.start(); c2.start(); b2.start(); c3.start(); b3.start(); c4.start(); b4.start(); c5.start(); b5.start(); EJERCICIOS PARA IMPLEMENTAR EN LABORATORIO Implementar el ejercicio de la autopista que pasa por un puente estrecho. Implementar el ejercicio de los hinchas de futbol. 4. TAREA Implementar el ejercicio del aeropuerto desarrollado en clases teoricas. Se tiene un sistema con tres procesos fumadores y un proceso agente. Cada fumador esta continuamente preparando un cigarrillo y después se lo fuma. Para liar y fumar un cigarrillo, el fumador necesita tres ingredientes: tabaco, papel y fósforos. Uno de los procesos fumadores tiene tabaco, otro papel y el tercero fósforos. El agente tiene una cantidad infinita de los tres materiales. El agente deja dos de los ingredientes en una mesa. El fumador que tiene el ingrediente que falta prepara y se fuma el cigarrillo,, avisándole al agente cuando termina. Entonces el agente pone otros dos de los tres ingredientes en la mesa y el ciclo se repite. Escribir un programa que sincronice al agente y los fumadores. 5. BIBLIOGRAFÍA. Doug Lea Programación Concurrente en Java 2da. Edición. Addison Wesley 2001. Deitel y Deitel JAVA How to Program 3ra. Edición Prentice Hall 1999. Ken Arnold El Lenguaje de Programación JAVA. 3ra. Edición. James Goslin Addison Wesley 2001 David Holmes http://www.oup-usa.org/docs Oxford University Press http://java.sun.com/ Sun MycroSystems. 5