Natalia Partera Jaime Alumna colaboradora de la asignatura

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Natalia Partera Jaime Alumna colaboradora de la asignatura"

Transcripción

1 Programación Concurrente y de Tiempo Real Guión de prácticas 6: Programación en Java de algoritmos de control de la Exclusión Mutua con variables comunes Natalia Partera Jaime Alumna colaboradora de la asignatura

2 Índice 1. Introducción 2 2. Búsqueda de un algoritmo de control de la exclusión mutua Primer intento Segundo intento Tercer intento Cuarto intento Algoritmo de Dekker Variables volatile Ejercicios Soluciones de los ejercicios Ejercicio

3 1. Introducción A veces al ejecutar procesos concurrentemente, puede aparecer el problema de la exclusión mutua. Esto significa que varios de los procesos pueden pretender acceder a cierto recurso compartido a la misma vez. Para conseguir que los procesos trabajen como está previsto y aporten el resultado esperado, los ejecutaremos bajo la exclusión mutua controlada con variables comunes. Para garantizar el éxito del programa, sus procesos deben satisfacer la condición de exclusión mutua. Es decir, las instrucciones de cada proceso que hacen referencia al recurso crítico compartido (sección crítica) no deben ejecutarse entrelazadas. Por lo que es necesario controlar la exclusión mutua de los procesos. Para un número N de procesos, es necesario: Identificar y diferenciar, dentro de cada proceso, entre su sección crítica y el resto del código. Permitir que sólo un proceso pueda estar ejecutando su sección crítica a la vez. Para ello, cada proceso debe ejecutar un pre-protocolo antes de entrar en su sección crítica y un post-protocolo al salir. Las condiciones para resolver este tipo de problemas son las mismas sean 2 procesos los que intervengan o sean más. Tan sólo hay que adaptar el algoritmo al número de procesos que intervienen. Uno de los algoritmos que solucionan el problema de la exclusión mutua es el algoritmo de Dekker. A continuación, procedemos a explicarlo paso a paso. Para entenderlo mejor, lo explicaremos primero para 2 procesos. 2. Búsqueda de un algoritmo de control de la exclusión mutua Para buscar un algoritmo que controle la exclusión mutua, utilizaremos variables comunes a ambos procesos, que podrán ser consultadas por todos ellos. Supondremos que sólo tenemos 2 procesos, aunque puede generalizarse para N procesos Primer intento Ya hemos mencionado que para controlar la exclusión mutua es necesario que los procesos tengan un pre-protocolo y un post-protocolo que se ejecuten antes y después de su sección crítica. Lo más sencillo entonces es pensar en una variable global que indique a qué proceso le toca el turno. Debemos recordar que cada hilo en Java tiene un nombre, o bien un nombre específico proporcionado por el programador, o bien un nombre genérico proporcionado por Java. Estos nombres proporcionados por Java siguen la estructura Thread-x, donde x es un número consecutivo y único para cada hilo, por lo que permiten ordenar los hilos siguiendo un orden definido. Pues bien, podemos crear una variable entera global turno que indique si es el turno del hilo 0 o del hilo 1. Cada hilo comprueba en su pre-protocolo si el número de la variable turno coincide con su número de proceso, el expresado en el nombre generado automáticamente. Si as así, continua y ejecuta el código de su sección crítica y el post-protocolo. Si no, entra en un bucle hasta que tenga permiso para ejecutar su sección crítica. Cuando tras ejecutar su sección crítica, ejecute su post-protocolo, cambiará en él el valor de la variable turno para que indique al otro hilo (o al siguiente en el caso de N procesos). 2

4 Otra opción sería distinguir el hilo por su identificador, que es único y no puede cambiar mientras el hilo exista. Para ello habría que almacenar los identificadores de los hilos en una estructura a la que puedan acceder todos. Esto habría que hacerlo desde el programa principal antes de lanzarlos. Esta forma además nos permite cambiar los nombres de los hilos a nuestro antojo. Veamos cómo quedaría su código: /** * Programa de prueba del intento 1. * Natalia Partera 1.0 */ public class PrimerIntento extends Thread public static volatile long turno; public static volatile long[] turnos; public static volatile int indice = 0; public void run() for(int i = 0; i < 10; ++i) //Antes del pre-protocolo System.out.println(this.getName() + ": Antes del pre-protocolo."); //Pre-protocolo System.out.println(this.getName() + ": Pre-protocolo"); while (turno!= this.getid()) //Sección crítica System.out.println(this.getName() + ": Sección crítica. Vuelta " + i); //Post-protocolo System.out.println(this.getName() + ": Post-protocolo"); if(indice == 1) indice = 0; else ++indice; turno = turnos[indice]; public static void main(string[] args) throws InterruptedException PrimerIntento t1 = new PrimerIntento(); PrimerIntento t2 = new PrimerIntento(); turnos = new long[2]; turnos[0] = t1.getid(); turnos[1] = t2.getid(); turno = turnos[indice]; 3

5 t1.start(); t2.start(); t1.join(); t2.join(); Hay un problema en este modelo, y es que obliga a que haya una alternancia entre los 2 hilos, o que se ejecuten en un cierto orden si son más de 2, antes de que el mismo hilo pueda volver a tener acceso al recurso crítico. Además, si uno de los dos hilos muere o es eliminado, el otro proceso se bloquea en su sección crítica. Estos problemas se deben a que los hilos comprueban y modifican el valor de una misma variable, y tan sólo dependen de ella Segundo intento En esta ocasión, vamos a intentar solucionar el problema del intento anterior añadiendo más variables de control. Ahora cada hilo tendrá su propia variable de control que reflejará si los demás pueden usar el recurso crítico o no. Las variables de control seguirán siendo enteras, y ahora su valor se sustituirá por 0 y 1, o si lo prefiere, puede usar una variable booleana en su lugar. Cuando un hilo quiere entrar en su sección crtíca, coloca su variable a 0, indicando a los demás hilos que no intenten obtener el recurso crítico, que no pueden. Una vez que el hilo llega al post-protocolo coloca su variable de control a 1, indicando que el recurso crítico está libre. Si un hilo desea ejecutar su sección crítica, comprobará que todas las demás variables de control sean distintas de 0. Si no es así, espera. Veamos cómo quedaría su código: /** * Programa de prueba del intento 2. * Natalia Partera 1.0 */ public class SegundoIntento extends Thread public static volatile boolean[] permisos; public void run() for(int i = 0; i < 10; ++i) //Antes del pre-protocolo System.out.println(this.getName() + ": Antes del pre-protocolo."); //Pre-protocolo System.out.println(this.getName() + ": Pre-protocolo"); String name = this.getname(); name = name.replace("thread-", ""); int numthread = Integer.parseInt(name); int otrothread; if (numthread == 0) 4

6 otrothread = 1; else otrothread = 0; System.out.println(this.getName() + ": permisos[otrothread] = " + permisos[otrothread]); while (permisos[otrothread] == false) System.out.println(this.getName() + ": En el bucle, permisos[" + otrothread + "] = " + permisos[otrothread]); permisos[numthread] = false; //Sección crítica System.out.println(this.getName() + ": Sección crítica. Vuelta " + i); //Post-protocolo System.out.println(this.getName() + ": Post-protocolo"); permisos[numthread] = true; public static void main(string[] args) throws InterruptedException SegundoIntento t1 = new SegundoIntento(); SegundoIntento t2 = new SegundoIntento(); permisos = new boolean[2]; for (int i = 0; i < 2; ++i) permisos[i] = true; t1.start(); t2.start(); t1.join(); t2.join(); Desgraciadamente, este intento no cumple con el requerimiento de exclusión mutua. Puede darse el caso de que los hilos se intercalen al comprobar las demás variables de control y al entrar luego en su sección crítica y que al final acaben los dos hilos ejecutando a la vez su sección crítica. Es decir, puede pasar lo siguiente: 1. P 1 comprueba C 2 y encuentra que C 2 = P 2 comprueba C 1 y encuentra que C 1 = P 1 pone C 1 a P 2 pone C 2 a Ambos procesos entran en sus secciones críticas. 5

7 2.3. Tercer intento Para evitar la situación anterior, se puede cambiar el orden en el que se espera en el bucle y se cambia la variable de control. Para que no obtengan dos hilos el permiso para entrar, lo que se hace ahora es que primero los hilos declaran su intención (cambiando su variable) y luego esperan a poder entrar en la sección crítica. De este modo se asegura que solamente un hilo entre en su sección crítica a la vez. Cuando un hilo llega a su pre-protocolo anuncia su intención de ejecutar su sección crítica cambiando el valor de su variable de control a 0. Luego el hilo se queda esperando en un bucle hasta que las demás variables de control valen 1. En ese momento el hilo entra en su sección crítica. Después, en su postprotocolo, cambia el valor de su variable de control a 1 para indicar que ha dejado libre el recurso crítico. Veamos cómo quedaría su código: /** * Programa de prueba del intento 3. * Natalia Partera 1.0 */ public class TercerIntento extends Thread public static volatile boolean[] permisos; public void run() for(int i = 0; i < 10; ++i) //Antes del pre-protocolo System.out.println(this.getName() + ": Antes del pre-protocolo."); //Pre-protocolo System.out.println(this.getName() + ": Pre-protocolo"); String name = this.getname(); name = name.replace("thread-", ""); int numthread = Integer.parseInt(name); int otrothread; if (numthread == 0) otrothread = 1; else otrothread = 0; permisos[numthread] = false; while(permisos[otrothread] == false) //Sección crítica System.out.println(this.getName() + ": Sección crítica. Vuelta " + i); //Post-protocolo System.out.println(this.getName() + ": Post-protocolo"); permisos[numthread] = true; 6

8 public static void main(string[] args) throws InterruptedException TercerIntento t1 = new TercerIntento(); TercerIntento t2 = new TercerIntento(); permisos = new boolean[2]; for (int i = 0; i < 2; ++i) permisos[i] = true; t1.start(); t2.start(); t1.join(); t2.join(); Con este código hemos conseguido que sólo un hilo ejecute su sección crítica a la vez. Sin embargo, el programa puede bloquearse si algunas instrucciones de distintos hilos se ejecutan entrelazadas y concurrentemente: 1. P 1 pone C 1 a P 2 pone C 2 a P 1 comprueba C 2 y encuentra que C 2 = 0, por lo que permanece en el bucle. 4. P 2 comprueba C 1 y encuentra que C 1 = 0, por lo que permanece en el bucle. Esta secuencia demuestra cómo pueden bloquearse los hilos tras declarar su intención de ejecutar su sección crítica pero sin poder entrar en ella Cuarto intento Este intento continua el razonamiento del anterior, y obliga a un hilo que abandone su intención de ejecutar su sección crítica si descubre que puede existir un estado de contención con otro proceso, donde se bloquean mutuamente. Para obligar a un hilo que abandone su intención momentaneamente por si existe contención, se cambia el valor de su variable de control dos veces mientras que está en el bucle esperando. De este modo si está esperando y otro hilo desea ejecutar su sección crítica también, al poner su variable de control a 1, el otro ejecuta su sección crítica. Luego vuelve a cambiar el valor de su variable de control para volver a indicar su intención de entrar en su sección crítica. Veamos cómo quedaría su código: /** * Programa de prueba del intento 4. * Natalia Partera 1.0 */ 7

9 public class CuartoIntento extends Thread public static volatile boolean[] permisos; public void run() for(int i = 0; i < 10; ++i) //Antes del pre-protocolo System.out.println(this.getName() + ": Antes del pre-protocolo."); //Pre-protocolo System.out.println(this.getName() + ": Pre-protocolo"); String name = this.getname(); name = name.replace("thread-", ""); int numthread = Integer.parseInt(name); int otrothread; if (numthread == 0) otrothread = 1; else otrothread = 0; permisos[numthread] = false; while(permisos[otrothread] == false) permisos[numthread] = true; permisos[numthread] = false; //Sección crítica System.out.println(this.getName() + ": Sección crítica. Vuelta " + i); //Post-protocolo System.out.println(this.getName() + ": Post-protocolo"); permisos[numthread] = true; public static void main(string[] args) throws InterruptedException CuartoIntento t1 = new CuartoIntento(); CuartoIntento t2 = new CuartoIntento(); permisos = new boolean[2]; for (int i = 0; i < 2; ++i) permisos[i] = true; t1.start(); t2.start(); t1.join(); t2.join(); Con este algoritmo tenemos garantizada la exclusión mutua. Sin embargo puede dar lugar a procesos ansiosos. Veamos una secuencia en la que esto puede ocurrir: 8

10 1. P 1 pone C 1 a P 2 pone C 2 a P 2 comprueba C 1 y encuentra que C 1 = 0, por lo que permanece en su bucle y cambia C 2 a P 1 entra en su sección crítica y su post-protocolo, donde cambia C 1 a P 2 sigue en el bucle y cambia C 2 a En este punto, si P 1 no desea volver a entrar en su sección crítica, P 2 puede por fin entrar. Pero si P 1 entra en su pre-protocolo y vuelve a solicitar entrar en su sección crítica, P 2 se encontraría atrapado en el bucle. Otro defecto del algoritmo es que puede provocar un livelock. Esto puede ocurrir cuando ambos hilos se bloqueen y se sigan ejecutando concurrente y entrelazadamente, cambiando ambos los valores de sus variables de control pero sin llegar a ejecutar su sección crítica ninguno de los dos: 1. P 1 pone C 1 a P 2 pone C 2 a P 2 comprueba C 1 y encuentra que C 1 = 0, por lo que permanece en el bucle y cambia C 2 a P 2 sigue en el bucle y cambia C 2 a P 1 comprueba C 2 y encuentra que C 2 = 0, por lo que permanece en el bucle y cambia C 1 a P 1 sigue en el bucle y cambia C 1 a P 2 comprueba C 1 y encuentra que C 1 = 0, por lo que permanece en el bucle. 8. P 1 comprueba C 2 y encuentra que C 2 = 0, por lo que permanece en el bucle Algoritmo de Dekker El problema del último intento es que por no querer producir un bloqueo, no insiste el hilo lo suficiente en su derecho a usar el recurso crítico. Si lo combinamos con el primer intento, obligará a que alguno de los hilos entre en su sección crítica en el caso de que los dos se estén cediendo el recurso crítico entre ellos mutuamente, es decir, si hay contención. Primero un hilo anuncia su deseo de entrar en la sección crítica, por ejemplo el hilo 1. Pero antes de entrar en la sección crítica comprueba si tiene derecho a insistir en ello, comprobando el valor de la variable turno. Si no tiene derecho, desactiva el anuncio de entrada en la sección crítica, poniendo su variable de control (C 1 ) a 1, y quedando en espara hata que reciba el turno. Cuando el otro hilo (hilo 2) completa su sección crítica, el hilo 1 recibe el turno. En ese momento, el hilo 1 vuelve a ajustar su variable de control a 0 y entra en su sección crítica. Al salir de la sección crítica, cambia el valor de su variable de control y le devuelve el turno al otro hilo. 9

11 Veamos cómo quedaría su código: /** * Programa de prueba del intento 5: algoritmo de Dekker. * Natalia Partera 1.0 */ public class Dekker extends Thread public static volatile long turno; public static volatile long[] turnos; public static volatile int indice = 0; public static volatile boolean[] permisos; public void run() for(int i = 0; i < 10; ++i) //Antes del pre-protocolo System.out.println(this.getName() + ": Antes del pre-protocolo."); //Pre-protocolo System.out.println(this.getName() + ": Pre-protocolo"); String name = this.getname(); name = name.replace("thread-", ""); int numthread = Integer.parseInt(name); int otrothread; if (numthread == 0) otrothread = 1; else otrothread = 0; permisos[numthread] = false; while(permisos[otrothread] == false) if(turno!= this.getid()) permisos[numthread] = true; while(turno!= this.getid()) permisos[numthread] = false; //Sección crítica System.out.println(this.getName() + ": Sección crítica. Vuelta " + i); //Post-protocolo System.out.println(this.getName() + ": Post-protocolo"); permisos[numthread] = true; if(indice == 1) indice = 0; else ++indice; turno = turnos[indice]; 10

12 public static void main(string[] args) throws InterruptedException Dekker t1 = new Dekker(); Dekker t2 = new Dekker(); turnos = new long[2]; turnos[0] = t1.getid(); turnos[1] = t2.getid(); turno = turnos[indice]; permisos = new boolean[2]; for (int i = 0; i < 2; ++i) permisos[i] = true; t1.start(); t2.start(); t1.join(); t2.join(); El algoritmo de Dekker es correcto y satisface los requerimientos de exclusión mutua y ausencia de bloqueos. Ningún hilo puede volverse ansioso y en ausencia de contención, un proceso entra en su sección crítica inmediatamente si lo desea. 3. Variables volatile Como habrá observado en los ejemplos anteriores, las variables globales han sido definidas como volatile. Esta palabra reservada puede usarse en tipos primitivos o en objetos. Si una variable es volatile el compilador está obligado a leer y escribir su valor en memoria cada vez que sea accedida, en lugar de hacerlo desde o sobre la memoria caché. Esto permite que una variable global sea accedida por distintos hilos que modifiquen su valor y que sea sincronizada automáticamente en cada acceso. 4. Ejercicios Ejercicio 1 Implemente el algoritmo de la panadería de Lamport para dos variables. Compílelo varias veces para comprobar que funciona correctamente. Puede comparar su código con el que se encuentra en

13 5. Soluciones de los ejercicios En esta sección encontrará las soluciones a los ejercicios propuestos a lo largo del guión Ejercicio 1 A continuación puede ver la implementación del algoritmo de Lamport para 2 hilos: /** * Programa de prueba del algoritmo de Lamport. * Natalia Partera 1.0 */ public class Lamport extends Thread public static volatile int[] turnos; public void run() for(int i = 0; i < 10; ++i) //Antes del pre-protocolo System.out.println(this.getName() + ": Antes del pre-protocolo."); //Pre-protocolo System.out.println(this.getName() + ": Pre-protocolo"); String name = this.getname(); name = name.replace("thread-", ""); int numthread = Integer.parseInt(name); int otrothread; if (numthread == 0) otrothread = 1; else otrothread = 0; turnos[numthread] = 1; turnos[numthread] = turnos[otrothread] + 1; while (turnos[otrothread]!= 0 && turnos[numthread] > turnos[otrothread]) //Sección crítica System.out.println(this.getName() + ": Sección crítica. Vuelta " + i); //Post-protocolo System.out.println(this.getName() + ": Post-protocolo"); turnos[numthread] = 0; public static void main(string[] args) throws InterruptedException Lamport t1 = new Lamport(); Lamport t2 = new Lamport(); 12

14 turnos = new int[2]; turnos[0] = 0; turnos[1] = 0; t1.start(); t2.start(); t1.join(); t2.join(); 13

Tema 6. Threads: programas multitarea

Tema 6. Threads: programas multitarea Tema 6. Threads: programas multitarea Procesos e hilos Creación de threads Ciclo de vida de un thread Sincronización Prioridades Grupos de threads Relación de métodos Ejemplo sincronización 1 Procesos

Más detalles

UNIDAD 3 MEMORIA COMÚN. El problema de exclusión mutua

UNIDAD 3 MEMORIA COMÚN. El problema de exclusión mutua UNIDAD 3 MEMORIA COMÚN El problema de exclusión mutua Exclusión mutua Exclusión mutua significa asegurar que un recurso compartido (variable, estructura de datos, etc.) sea accedida por un solo hilo a

Más detalles

Ejemplo. class SiNoThread extends Thread { private String SiNo; static int Contador = 0; public SiNoThread(String s) { super(); SiNo = s; }

Ejemplo. class SiNoThread extends Thread { private String SiNo; static int Contador = 0; public SiNoThread(String s) { super(); SiNo = s; } Qué son los threads? Todos los programadores conocen lo que es un proceso, la mayoría diría que es un programa en ejecución: tiene un principio, una secuencia de instrucciones y tiene un final. Un thread

Más detalles

Concurrencia Espera Activa. Guillermo Román Díez

Concurrencia Espera Activa. Guillermo Román Díez Concurrencia Espera Activa Guillermo Román Díez groman@fi.upm.es Universidad Politécnica de Madrid Curso 2017-2018 Guillermo Román, UPM CC: Espera Activa 1/9 Espera Activa Espera Activa (busy-waiting)

Más detalles

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 3 Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Definición de tipo genérico Hablamos de un tipo genérico cuando el tipo en cuestión depende

Más detalles

Threads o Hilos. Un thread en JAVA comienza como una instancia de java.lang.thread antes de convertirse en un hilo de ejecución.

Threads o Hilos. Un thread en JAVA comienza como una instancia de java.lang.thread antes de convertirse en un hilo de ejecución. Threads o Hilos Los hilos son otra forma de crear la posibilidad de concurrencia de actividades; sin embargo, la gran diferencia es que los hilos comparten el código y el acceso a los datos. En cierta

Más detalles

CAPÍTULO 3. PROCESOS VS. HILOS

CAPÍTULO 3. PROCESOS VS. HILOS CAPÍTULO 3. PROCESOS VS. HILOS 3.1 Primitivas de sincronización en Java Java no tiene semáforos como primitivas de sincronización. Sin embargo, proporciona otras primitivas diferentes con las cuales sí

Más detalles

Tema 4. Control de flujo. Programación Programación - Tema 4: Control de Flujo

Tema 4. Control de flujo. Programación Programación - Tema 4: Control de Flujo Tema 4 Control de flujo Programación 2015-2016 Programación - Tema 4: Control de Flujo 1 Tema 4. Control de flujo Introducción. Estructuras condicionales. Estructuras de repetición. Programación - Tema

Más detalles

Concurrencia. Primitivas IPC con bloqueo

Concurrencia. Primitivas IPC con bloqueo Concurrencia Primitivas IPC con bloqueo Primitivas de IPC con bloqueo La solución de Peterson es correcta, pero tiene el defecto de requerir espera ocupada: Cuando un proceso quiere entrar en su región

Más detalles

Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos

Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos 1! 1. Algoritmos recursivos " 1.1 Algoritmos recursivos. Recursión simple " 1.2 Algoritmos con vuelta atrás y ejemplos! 2. Complejidad de

Más detalles

Estructuras de control selectivas

Estructuras de control selectivas Práctica 3 Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 2.0.2 Concepto de sentencia y estructura de control El cuerpo de los métodos

Más detalles

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta Centro Asociado Palma de Mallorca Introducción Práctica de Programación Java Antonio Rivero Cuesta Sesión III La Sintaxis de Java II... 6 Estructuras de Control... 7 Estructuras de Selección... 8 Sentencia

Más detalles

Concurrencia Monitores. Guillermo Román Díez

Concurrencia Monitores. Guillermo Román Díez Concurrencia Monitores Guillermo Román Díez groman@fi.upm.es Universidad Politécnica de Madrid Curso 2016-2017 Guillermo Román, UPM CC: Monitores 1/25 Recursos Compartidos Pregunta La especificación de

Más detalles

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta Centro Asociado Palma de Mallorca Antonio Rivero Cuesta La Sintaxis de Java II... 6 Estructuras de control... 7 Estructuras de selección... 8 Sentencia if... 9 Sentencia if - else... 12 Operador condicional...

Más detalles

SISTEMAS OPERATIVOS I (Sistemas) / SISTEMAS OPERATIVOS (Gestión) septiembre 2009

SISTEMAS OPERATIVOS I (Sistemas) / SISTEMAS OPERATIVOS (Gestión) septiembre 2009 SISTEMAS OPERATIVOS I (Sistemas) / SISTEMAS OPERATIVOS (Gestión) septiembre 2009 4. (2 p) Dos procesos A y B se ejecutan concurrentemente en un determinado sistema. El proceso A ejecuta unas tareas ( Tareas

Más detalles

Entiendo los métodos de Java equals y hashcode

Entiendo los métodos de Java equals y hashcode Todos los días cuando programamos usamos objetos y en muchas ocasiones necesitamos comparar unos con otros. Para ello en muchas ocasiones usamos los métodos de de Java equals y hashcode. Estos métodos

Más detalles

Tema 12: Programación multihilo

Tema 12: Programación multihilo Tema 12: Programación multihilo Antonio J. Sierra Índice 1. Modelo de hilo en Java. 2. El hilo principal. 3. Creación de un hilo. 4. Creación de múltiples hilos. Prioridades. 5. Comunicación entre hilos.

Más detalles

seguridad y vivacidad/viveza

seguridad y vivacidad/viveza Aclaraciones seguridad y vivacidad/viveza Un programa concurrente puede fallar por varias razones, las cuales se pueden clasificar entre dos grupos de propiedades: seguridad: Esa propiedad indica que no

Más detalles

Programación concurrente en Java

Programación concurrente en Java Diseño Y Aplicaciones de Sistemas Distribuidos Programación concurrente en Java Joan Vila DISCA / UPV Departament d Informàtica de Sistemes i Computadors Universitat Politècnica de València Threads en

Más detalles

Guillermo Román Díez

Guillermo Román Díez Concurrencia Creación de Procesos en Java Guillermo Román Díez groman@fi.upm.es Universidad Politécnica de Madrid Curso 2016-2017 Guillermo Román, UPM CC: Creación de Procesos en Java 1/18 Concurrencia

Más detalles

dit Programación concurrente Sincronización condicional UPM

dit Programación concurrente Sincronización condicional UPM 20151028 dit UPM Programación concurrente Sincronización condicional Juan Antonio de la Puente Algunos derechos reservados. Este documento se distribuye bajo licencia Crea9ve Commons

Más detalles

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa Contenido Estructura de un programa en Java... 2 Tipos de datos básicos... 2 Operadores... 3 Literales... 4 Entrada / Salida... 4 Sentencias condicionales... 5 Funciones... 5 Ejercicios... 6 Variables,

Más detalles

Parte I: Programación en un lenguaje orientado a objetos

Parte I: Programación en un lenguaje orientado a objetos Parte I: Programación en un lenguaje orientado a objetos 1. Introducción a los lenguajes de programación 2. Datos y expresiones 3. Estructuras algorítmicas 4. Datos compuestos 5. Modularidad 6. Tratamiento

Más detalles

Programación concurrente en Java. Breve introducción. Miguel Ángel LATRE Dept. de Informática e Ingeniería de Sistemas

Programación concurrente en Java. Breve introducción. Miguel Ángel LATRE Dept. de Informática e Ingeniería de Sistemas Programación concurrente en Java. Breve introducción Miguel Ángel LATRE Dept. de Informática e Ingeniería de Sistemas Concurrencia en Java Hilos de ejecución Clase Thread e interfaz Runnable Pausas Interrupciones

Más detalles

Arquitecturas cliente/servidor

Arquitecturas cliente/servidor Arquitecturas cliente/servidor Creación de Sockets Cliente Servidor 1 Creación de Sockets Cliente/Servidor Sockets en TCP Concepto de Hilos Definición de DAEMON Sockets en UDP 2 THREADS 3 Qué es un thread?

Más detalles

Programación Tema 4: Métodos. Programación DIT-UPM

Programación Tema 4: Métodos. Programación DIT-UPM Programación Tema 4: Métodos 1 Contenidos! 1. El concepto de método! 2. Definición: cabecera! 3. Definición: cuerpo! 4. Uso de métodos! 5. Métodos útiles 2 Métodos! Un método es un bloque de código con

Más detalles

Concurrencia de Procesos

Concurrencia de Procesos Concurrencia de Procesos Dos o mas procesos, se dice que son concurrentes o paralelos, cuando se ejecutan al mismo tiempo. Esta concurrencia puede darse en un sistema con un solo procesador (pseudo paralelismo)

Más detalles

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 2 - Introducción al lenguaje Java, identificadores y comentarios. Carlos Montenegro Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 1. Introducción: Java tiene como todos

Más detalles

Programación concurrente y semáforos en Java

Programación concurrente y semáforos en Java Programación concurrente y semáforos en Java En Java es posible ejecutar tareas en paralelo, utilizando hebras de control (hilos, threads). Este modo de programación permite tener un espacio de memoria,

Más detalles

Laboratorio I Java Threads (Silberschatz Galvin)

Laboratorio I Java Threads (Silberschatz Galvin) Laboratorio I Java Threads (Silberschatz Galvin) Un proceso es un programa ejecutandose dentro de su propio espacio de direcciones. Java es un sistema multiproceso, esto significa que soporta varios procesos

Más detalles

Introducción a Java. Introducción a Java. Programación I

Introducción a Java. Introducción a Java. Programación I Introducción a Java Introducción a Java Programación I Como Funciona Tipos de Datos TIPO TAMAÑO RANGO byte 8 bits Valores numéricos de 128 a 127 short 16 bits Valores numéricos de 32.768 a 32.767 int 32

Más detalles

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Unidad Didáctica 2 Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.3 Índice

Más detalles

EXCLUSIÓN MUTUA ENTRE HILOS. TEMA 5: Control de la Concurrencia en Java (API Estándar) Sintaxis para Bloques de Código Sincronizado

EXCLUSIÓN MUTUA ENTRE HILOS. TEMA 5: Control de la Concurrencia en Java (API Estándar) Sintaxis para Bloques de Código Sincronizado TEMA 5: Control de la Concurrencia en Java (API Estándar) CONTENIDO Exclusión Mutua con código synchronized. Exclusión Mutua con métodos synchronized. Protocolos de Control de la Exclusión Mutua. Interbloqueos

Más detalles

Examen parcial Convocatoria de junio de 2005 FUNDAMENTOS DE LA PROGRAMACIÓN

Examen parcial Convocatoria de junio de 2005 FUNDAMENTOS DE LA PROGRAMACIÓN EJERCICIO 1 (1.5 puntos) Diseñe un conjunto de casos de prueba adecuado para comprobar el funcionamiento de un método encargado de calcular la duración de una llamada telefónica. Entradas Hora de inicio

Más detalles

UPM Concurrencia en Java

UPM Concurrencia en Java UPM Concurrencia en Java Juan Antonio de la Puente DIT/UPM Hebras (threads) Una hebra es un objeto de una subclase de java.lang.thread o una implementación de la interfaz Runnable El código que ejecuta

Más detalles

Ejecución de hebras. En realidad, todas las aplicaciones escritas en Java son aplicaciones multihebra (recuerde el recolector de basura).

Ejecución de hebras. En realidad, todas las aplicaciones escritas en Java son aplicaciones multihebra (recuerde el recolector de basura). Ejecución de hebras En realidad, todas las aplicaciones escritas en Java son aplicaciones multihebra (recuerde el recolector de basura). Hebras vs. Procesos Los cambios de contexto son más costosos en

Más detalles

BENEMERITA UNIVERSIDADD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN

BENEMERITA UNIVERSIDADD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN BENEMERITA UNIVERSIDADD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN PROGRAMACION CONCURRENTE PARALELA Y PRACTICA 3 (PARTE 1 Y 2) HILOS POSIX NOMBRE:

Más detalles

Ejercicio de Programación Orientada a Objetos Curso 2016/2017 Exámenes

Ejercicio de Programación Orientada a Objetos Curso 2016/2017 Exámenes Ejercicio de Programación Orientada a Objetos Curso 2016/2017 Exámenes Introducción El ejercicio consiste en la implementación de una aplicación para la creación, edición, resolución y corrección de exámenes.

Más detalles

Curso Informática Lección 4. Instrucciones de control

Curso Informática Lección 4. Instrucciones de control Fundamentos de Informática Lección 4. Instrucciones de control Curso 2010-2011 Pedro Álvarez y José Ángel Bañares 24/09/2010. Dpto. Informática e Ingeniería de Sistemas. Índice de contenidos Introducción

Más detalles

Programación concurrente Hebras

Programación concurrente Hebras 20151021 dit UPM Programación concurrente Hebras Juan Antonio de la Puente Algunos derechos reservados. Este documento se distribuye bajo licencia Crea9ve Commons Reconocimiento-NoComercial-Compar9rIgual

Más detalles

Ejercicio 1 (proyecto prlistas, paquete listas)

Ejercicio 1 (proyecto prlistas, paquete listas) PRÁCTICA 3 Curso 2004-05 En esta práctica construiremos y usaremos dos paquetes: el primero, listas, que implementa listas genéricas y el segundo, colas, que implementa colas y colas de prioridades genéricas.

Más detalles

Concurrencia Condiciones de Carrera. Guillermo Román Díez

Concurrencia Condiciones de Carrera. Guillermo Román Díez Concurrencia Condiciones de Carrera Guillermo Román Díez groman@fi.upm.es Universidad Politécnica de Madrid Curso 2016-2017 Guillermo Román, UPM CC: Condiciones de Carrera 1/20 Condiciones de carrera Condición

Más detalles

Bloque II. Elementos del lenguaje de programación Java

Bloque II. Elementos del lenguaje de programación Java Bloque II. Elementos del lenguaje de programación Java 1.Introducción a los lenguajes de programación 2. Estructura de un programa 3. Datos y expresiones simples 4. Instrucciones de control 5. Entrada/salida

Más detalles

Estructura de datos y Programación

Estructura de datos y Programación Estructura de datos y Programación Tema: Conceptos Básicos- Estructuras de control - Arreglos Ing. Analia Méndez Ing. Raquel Zarco Año: 2012 ELEMENTOS DE UN PROGRAMA EN JAVA El programa Java consta de

Más detalles

Normalmente, los programas son ejecutados de forma secuencial. Único flujo de control

Normalmente, los programas son ejecutados de forma secuencial. Único flujo de control Hilos BUAP Introducción Normalmente, los programas son ejecutados de forma secuencial Único flujo de control Un programa con un único flujo de control, ejecuta sólo una tarea (hilo) Dr. Ivan Olmos 2 Introducción

Más detalles

Programación orientada a objetos III

Programación orientada a objetos III Ingeniería en Desarrollo de software Semestre 05 Asignatura: Programación orientada a objetos III Clave: 16142524 Universidad Abierta y a Distancia de México 1 Índice PRESENTACIÓN DE LA UNIDAD... 3 PROPÓSITOS

Más detalles

Modelo de Cómputo. Programación concurrente

Modelo de Cómputo. Programación concurrente Programa concurrente Programa concurrente: conjunto finito de procesos (secuenciales). Un proceso secuencial está escrito con un conjunto finito de acciones atómicas. Ejecución: una secuencia de acciones

Más detalles

Unidad IV: Programación concurrente (MultiHilos) 4.1. Concepto de hilo

Unidad IV: Programación concurrente (MultiHilos) 4.1. Concepto de hilo Unidad IV: Programación concurrente (MultiHilos) 4.1. Concepto de hilo Hilo (theread) llamado también proceso ligero o subproceso, es la unidad de ejecución de un proceso y esta asociado con una secuencia

Más detalles

Programación Orientada a Objetos (Grado en Ingeniería Informática y Grado en Ingeniería en Tecnologías de la Información - UNED)

Programación Orientada a Objetos (Grado en Ingeniería Informática y Grado en Ingeniería en Tecnologías de la Información - UNED) Examen de Ejemplo Programación Orientada a Objetos (Grado en Ingeniería Informática y Grado en Ingeniería en Tecnologías de la Información - UNED) Parte Teórica (2,5 puntos). La respuesta correcta se indica

Más detalles

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota: Nombre y apellidos: Nota: Escribe tu nombre y apellidos en esta hoja e inmediatamente en todas las suplementarias, incluso las de sucio. El no hacerlo puede suponer tu expulsión Puedes utilizar el lápiz

Más detalles

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

Java y JVM: programación concurrente. Adolfo López Díaz Java y JVM: programación concurrente Adolfo López Díaz JVM Máquina virtual Ambiente de programación virtualizado Permite la ejecución de programas Java ejecutables multiplataforma Programación concurrente

Más detalles

Tema 9. Algoritmos sobre listas. Programación Programación - Tema 9: Algoritmos sobre listas

Tema 9. Algoritmos sobre listas. Programación Programación - Tema 9: Algoritmos sobre listas Tema 9 Algoritmos sobre listas Programación 2015-2016 Programación - Tema 9: Algoritmos sobre listas 1 Tema 9. Algoritmos sobre listas Algoritmos sobre Arrays. Búsqueda. Inserción. Ordenación. Programación

Más detalles

Fundamentos de los Sistemas Operativos. Tema 2. Procesos José Miguel Santos Alexis Quesada Francisco Santana

Fundamentos de los Sistemas Operativos. Tema 2. Procesos José Miguel Santos Alexis Quesada Francisco Santana Fundamentos de los Sistemas Operativos Tema 2. Procesos 1998-2015 José Miguel Santos Alexis Quesada Francisco Santana Contenidos del Tema 2 Qué es un proceso Estructuras de datos para gestionar procesos

Más detalles

Apellidos: Nombre: Matrícula: UNIVERSIDAD POLITÉCNICA DE MADRID

Apellidos: Nombre: Matrícula: UNIVERSIDAD POLITÉCNICA DE MADRID Apellidos: Nombre: Matrícula: Concurrencia (parte 2)/clave: a Curso 2014/2015-2 o semestre (junio 2015) Grado en Ingeniería Informática / Grado en Matemáticas e Informática UNIVERSIDAD POLITÉCNICA DE MADRID

Más detalles

Es ambigua, ya que la división y la multiplicación tienen el mismo grado de precedencia, qué parte de la expresión se realiza primero?

Es ambigua, ya que la división y la multiplicación tienen el mismo grado de precedencia, qué parte de la expresión se realiza primero? Modulo 7. Expresiones y sentencias de control de Flujo En este punto de estudio se considera que tenemos claro los conceptos relacionados con variables y operadores, ahora estudiaremos como con las variables

Más detalles

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs. Variables Una variable no es más que un nombre simbólico que identifica una dirección de memoria: Suma el contenido de la posición 3001 y la 3002 y lo almacenas en la posición 3003 vs. total = cantidad1

Más detalles

1. Cuántas sentencias hay en la secuencia principal del siguiente programa?

1. Cuántas sentencias hay en la secuencia principal del siguiente programa? 1. Cuántas sentencias hay en la secuencia principal del siguiente programa? public class PruebaSwitch { System.out.print ("Opcion: "); case 3: System.out.println ("miércoles "); A. 1. B. 4. C. Más de 10.

Más detalles

1. Fundamentos. Existen dos tipos distintos de multitarea: BASADA EN PROCESOS

1. Fundamentos. Existen dos tipos distintos de multitarea: BASADA EN PROCESOS Hilos 1. Fundamentos. Los procesadores y los Sistemas Operativos modernos permiten la multitarea, es decir, la realización simultánea de dos o más actividades. En la realidad, un ordenador con una sola

Más detalles

Unidad 1: Gestión de Procesos

Unidad 1: Gestión de Procesos Unidad 1: Gestión de Procesos Tema 1, Concurrencia: Exclusión mutua y sincronización. 1.1 Problema de la sección crítica, alternativas al uso de semáforos: - Regiones críticas, Monitores, Variables de

Más detalles

CURSO : ESTRUCTURA DE DATOS DOCENTE : ING. JUAN ZEVALLOS VALLE

CURSO : ESTRUCTURA DE DATOS DOCENTE : ING. JUAN ZEVALLOS VALLE CURSO : ESTRUCTURA DE DATOS DOCENTE : ING. JUAN ZEVALLOS VALLE 1 Estructura de Datos 1. Logica de Programación 2. Uso de Algoritmos usando Lenguaje Java 3. Ingreso de datos 4. Sentencias de Control 1.

Más detalles

LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C)

LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C) APRENDERAPROGRAMAR.COM LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C) Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado

Más detalles

M.C. Yolanada Moyao Martínez

M.C. Yolanada Moyao Martínez M.C. Yolanada Moyao Martínez Es una técnica de programación que permite que un bloque de instrucciones se ejecute n veces. En Java los métodos pueden llamarse a sí mismos. Si dentro de un método existe

Más detalles

Examen de Métodos de Programación Ingeniería Informática Primera Parte

Examen de Métodos de Programación Ingeniería Informática Primera Parte Examen de Métodos de Programación Ingeniería Informática Primera Parte Cuestión 1. (2 puntos) Se pretende guardar y recuperar matrices de números reales de cualquier dimensión en ficheros binarios de tipos

Más detalles

CLAVE EXAMEN: a cd. c u r s o r = c u r s o r. g e t S i g u i e n t e ( ) ; p o s i c i o n ++;

CLAVE EXAMEN: a cd. c u r s o r = c u r s o r. g e t S i g u i e n t e ( ) ; p o s i c i o n ++; Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software UPM ETSIINF. Exámen de Programación II. Convocatoria extraordinaria.08-07-2016. Realización: El test se realizará en la hoja

Más detalles

REPASO ARRAYS O ARREGLOS UNIDIMENSIONALES EN JAVA. EJEMPLOS DE CÓDIGO. (CU00903C)

REPASO ARRAYS O ARREGLOS UNIDIMENSIONALES EN JAVA. EJEMPLOS DE CÓDIGO. (CU00903C) APRENDERAPROGRAMAR.COM REPASO ARRAYS O ARREGLOS UNIDIMENSIONALES EN JAVA. EJEMPLOS DE CÓDIGO. (CU00903C) Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado I Fecha revisión: 2039 Resumen:

Más detalles

Teoría de Sistemas Operativos Sincronización Procesos

Teoría de Sistemas Operativos Sincronización Procesos Teoría de Sistemas Operativos Sincronización Procesos Departamento de Electrónica º Semestre, 00 Gabriel Astudillo Muñoz http://www.elo.utfsm.cl/~elo1 Dos o más procesos leen o escriben ciertas zonas compartidas

Más detalles

STRINGBUFFER, STRINGBUILDER JAVA. EJEMPLO. DIFERENCIAS ENTRE CLASES. CRITERIOS PARA ELEGIR. MÉTODOS. (CU00914C)

STRINGBUFFER, STRINGBUILDER JAVA. EJEMPLO. DIFERENCIAS ENTRE CLASES. CRITERIOS PARA ELEGIR. MÉTODOS. (CU00914C) APRENDERAPROGRAMAR.COM STRINGBUFFER, STRINGBUILDER JAVA. EJEMPLO. DIFERENCIAS ENTRE CLASES. CRITERIOS PARA ELEGIR. MÉTODOS. (CU00914C) Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado

Más detalles

Colas. 5.1 Implementación

Colas. 5.1 Implementación Capítulo 5 Colas Las colas al igual que las pilas son un tipo especial de listas en las cuales los elementos se insertan por un lado y se eliminan por el otro. Es decir se sacan en el mismo orden en que

Más detalles

Examen Teórico Convocatoria de Junio de 2012

Examen Teórico Convocatoria de Junio de 2012 Examen Teórico Convocatoria de Junio de 2012 Nombre: DNI: Titulación: 1. Sobre el control de errores en Java: a) El siguiente método contiene un error de compilación debido al uso de excepciones. Explica

Más detalles

Secciones críticas y exclusión mutua

Secciones críticas y exclusión mutua Secciones críticas y exclusión mutua Lecturas: Andrews, secciones 3.1, 3.2, 3.3, 3.4 Ben-Ari, sección 2.2 Manuel Carro Universidad Politécnica de Madrid Este texto se distribuye bajo los términos de la

Más detalles

Interfaces. Amparo López Gaona. Septiembre de Amparo López Gaona () Interfaces Septiembre de / 1

Interfaces. Amparo López Gaona. Septiembre de Amparo López Gaona () Interfaces Septiembre de / 1 Interfaces Amparo López Gaona Septiembre de 2008 Amparo López Gaona () Interfaces Septiembre de 2008 1 / 1 Interfaces Las interfaces Java permiten al diseñador de clases establecer su forma definiendo

Más detalles

fundamentos de programación (unidad 4) programación estructurada en Java

fundamentos de programación (unidad 4) programación estructurada en Java fundamentos de programación (unidad 4) programación estructurada en Java Para ver una copia completa de la licencia, acudir a la dirección http://creativecommons.org/licenses/by-nc-sa/2.5/es/legalcode.es

Más detalles

Java Optional ifpresent y como utilizarlo

Java Optional ifpresent y como utilizarlo Hoy vamos a hablar de Java Optional ifpresent. Cuando trabajamos con el tipo Optional conseguimos mejoras a la hora de trabajar con valores nulos. Veamos un ejemplo sencillo imaginemos que tenemos una

Más detalles

Primitivas de Sincronización

Primitivas de Sincronización Primitivas de Sincronización JUAN CARLOS CONDE RAMÍREZ DISTRIBUTED COMPUTING Introducción Todas las soluciones previas al problema de mutex fueron un desperdicio de algún modo: Si un proceso es incapaz

Más detalles

Grado en Ingeniería Informática. Estructura de Datos y Algoritmos, Grupo 84M, 2014/ de Marzo de

Grado en Ingeniería Informática. Estructura de Datos y Algoritmos, Grupo 84M, 2014/ de Marzo de Grado en Ingeniería Informática Estructura de Datos y Algoritmos, Grupo 84M, 2014/2015 12 de Marzo de 2015 Nombre y Apellidos:... PROBLEMA 1 (1 punto) Programación Orientada a Objetos. Una empresa de alquiler

Más detalles

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

2. Indica cuál de las siguientes afirmaciones es cierta: Nombre:. Indica cuál de las siguientes afirmaciones es cierta: El diseño de un programa procedural está guiado por la división en tareas a realizar, mientras que el diseño orientado a objetos está dirigido

Más detalles

Benemérita Universidad Autónoma del Estado de Puebla

Benemérita Universidad Autónoma del Estado de Puebla Benemérita Universidad Autónoma del Estado de Puebla Facultad de Cs. De la Computación Programación Concurrente y Paralela Practica de Laboratorio No. 2 Profr: María del Carmen Cerón Garnica Alumno: Roberto

Más detalles

Programación concurrente

Programación concurrente Programación concurrente Java y Servicios Web I Master en Ingeniería Matemática Manuel Montenegro Dpto. Sistemas Informáticos y Computación Desp. 467 (Mat) montenegro@fdi.ucm.es Programación concurrente

Más detalles

Puebla, Pue a 4 de Junio del Programación Concurrente y Paralela

Puebla, Pue a 4 de Junio del Programación Concurrente y Paralela Puebla, Pue a 4 de Junio del 2015 Programación Concurrente y Paralela Algoritmo de Dekker y Peterson Problemas: 1.- Esquimales 2.- Identificar procesos. ALUMNOS: OSCAR EDUARDO GONZÁLEZ RAMOS MICHAEL CASTAÑEDA

Más detalles

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial. Tipos de Datos Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial. Entrada de datos Procesamientos de datos Salida de resultados Los

Más detalles

dit UPM Tema 2: Concurrencia /threads (java) Análisis y diseño de software José A. Mañas

dit UPM Tema 2: Concurrencia /threads (java) Análisis y diseño de software José A. Mañas Análisis y diseño de software dit UPM Tema 2: Concurrencia /threads (java) José A. Mañas 11.3.2018 referencias The Java tutorials: Concurrency Oracle Java Threads Scott Oaks & Henry Wong O'Reilly Media;

Más detalles

Comprender las diferencias entre tipos de datos primitivos similares, y aprender a elegir el tipo más conveniente en cada caso.

Comprender las diferencias entre tipos de datos primitivos similares, y aprender a elegir el tipo más conveniente en cada caso. Elementos básicos de programación en Java Objetivos del tema Conocer la estructura básica de un programa Java. Comprender los conceptos de tipo, valor y variable. Comprender las diferencias entre tipos

Más detalles

PROGRAMACIÓN GENÉRICA

PROGRAMACIÓN GENÉRICA PROGRAMACIÓN GENÉRICA Lenguajes de Programación - Orientación a Objetos: Progr. Genérica 1 Programación genérica Objetivo: escribir algoritmos genéricos, independientes de las clases concretas de los datos

Más detalles

EJERCICIO Y EJEMPLO RESUELTO: USO DE LA INTERFACE COMPARABLE Y MÉTODO COMPARETO DE JAVA. COMPARAR OBJETOS (CU00913C)

EJERCICIO Y EJEMPLO RESUELTO: USO DE LA INTERFACE COMPARABLE Y MÉTODO COMPARETO DE JAVA. COMPARAR OBJETOS (CU00913C) APRENDERAPROGRAMAR.COM EJERCICIO Y EJEMPLO RESUELTO: USO DE LA INTERFACE COMPARABLE Y MÉTODO COMPARETO DE JAVA. COMPARAR OBJETOS (CU00913C) Sección: Cursos Categoría: Lenguaje de programación Java nivel

Más detalles

Apellidos: Nombre: Matrícula:

Apellidos: Nombre: Matrícula: Apellidos: Nombre: Matrícula: Concurrencia (parte 2)/clave: a Curso 2016 2017 - Convocatoria Extraordinaria (Julio 2017) Grado en Ingeniería Informática / Grado en Matemáticas e Informática UNIVERSIDAD

Más detalles

2. Tratamiento de objetos con JAVA

2. Tratamiento de objetos con JAVA 2. Tratamiento de objetos con JAVA David Contreras Bárcena (ETSI) - Comillas 71 2.1 Ciclo de Vida de los Objetos Los objetos tienen un tiempo de vida y consumen recursos durante el mismo. Cuando un objeto

Más detalles

5. Sentencias selectivas o condicionales

5. Sentencias selectivas o condicionales 60 A. García-Beltrán y J.M. Arranz 5. Sentencias selectivas o condicionales Objetivos: a) Describir el funcionamiento de las sentencias selectivas o condicionales (if-else y switch) b) Interpretar el resultado

Más detalles

Paradigmas de lenguajes de programación. Introducción a la programación imperativa. Lenguaje C. Programación imperativa

Paradigmas de lenguajes de programación. Introducción a la programación imperativa. Lenguaje C. Programación imperativa Paradigmas de lenguajes de programación Introducción a la programación imperativa Algoritmos y Estructuras de Datos I Paradigma: Definición del modo en el que se especifica el cómputo (que luego es implementado

Más detalles

Control de Flujo. Estructuras de Control! Experiencia Educativa de Algorítmica CONTROL DE FLUJO

Control de Flujo. Estructuras de Control! Experiencia Educativa de Algorítmica CONTROL DE FLUJO Control de Flujo Estructuras de Control Experiencia Educativa de Algorítmica 1 Introducción El estilo de como escribimos y analizamos un algoritmo se convierte en una de las principales características

Más detalles

Datos Elementales y formato de un programa en Java

Datos Elementales y formato de un programa en Java Datos Elementales y formato de un programa en Java PROGRAMACION I Grado en Matematicas Informática Programación I - 2015/2016 Datos, variables y mi primer programa 1 Introducción a la programación o Programa:

Más detalles

PROGRAMACION CONCURRENTE

PROGRAMACION CONCURRENTE PROGRAMACION CONCURRENTE Ejemplos III: Sopa de Letras 1 Objetivo Mostrar las diferentes estrategias que puede seguir un gestor que tiene que ejecutar una tarea compleja que puede ser paralelizada en diferentes

Más detalles

12. Tipos de atributos

12. Tipos de atributos Programación orientada a objetos con Java 135 12. Tipos de atributos Objetivos: a) Profundizar en el concepto de atributo de una clase e indicar los tipos de atributos en Java b) Interpretar el código

Más detalles

Tema 2: EL TIPO DE DATOS ENTERO. INSTRUCCIÓN DE ASIGNACIÓN Y DE COMPOSICIÓN SECUENCIAL

Tema 2: EL TIPO DE DATOS ENTERO. INSTRUCCIÓN DE ASIGNACIÓN Y DE COMPOSICIÓN SECUENCIAL Tema 2: EL TIPO DE DATOS ENTERO. INSTRUCCIÓN DE ASIGNACIÓN Y DE COMPOSICIÓN SECUENCIAL Cualquier duda sobre el contenido de este tema se puede enviar al foro TEORIA2. 2.1.- El tipo de datos entero (byte,

Más detalles

Estructura de Datos Unidad 1: Repaso del Lenguaje Java

Estructura de Datos Unidad 1: Repaso del Lenguaje Java Estructura de Datos Unidad 1: Repaso del Lenguaje Java Introducción Java es un lenguaje de programación orientado a objetos, desarrollado por Sun Microsystems a principios de 1991, con el que se van a

Más detalles

BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN

BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN PROGRAMACIÓN CONCURRENTE Y PARALELA PRACTICA 8 MONITORES BASADOS EN SEMÁFOROS

Más detalles

18. Interfaces Declaración de una interfaz

18. Interfaces Declaración de una interfaz Programación orientada a objetos con Java 191 18. Interfaces Objetivos: a) Definir el concepto de interfaz b) Interpretar el código fuente de una aplicación Java donde aparecen interfaces c) Construir

Más detalles

Práctica #5: Uso de control de flujo, Excepciones y Lectura Estándar

Práctica #5: Uso de control de flujo, Excepciones y Lectura Estándar Práctica #5: Uso de control de flujo, Excepciones y Lectura Estándar Introducción El alumno creará cuatro programas en java que manejen control de flujo mediante las sentencias de bucle while y do/while,

Más detalles

Sincronización de procesos

Sincronización de procesos Sincronización de procesos Contenido Procesos concurrentes. El problema de la seccion critica Problemas clásicos de comunicación y sincronización. Mecanismos de comunicación y sincronización. DSO 2014

Más detalles