Primitivas de Sincronización

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

Download "Primitivas de Sincronización"

Transcripción

1 Primitivas de Sincronización JUAN CARLOS CONDE RAMÍREZ DISTRIBUTED COMPUTING

2 Introducción Todas las soluciones previas al problema de mutex fueron un desperdicio de algún modo: Si un proceso es incapaz de entrar a la CR, este verifica repetidamente que la condición de entrada sea verdadera; se está realizando trabajo inútil. Esta forma de espera es llamada espera activa (busy-wait). En lugar de verificar la condición de entrada repetidamente, si el proceso verifica la condición sólo cuando esta podría llegar a ser verdadera, este podría no desperdiciar ciclos de CPU. FCC-BUAP 2

3 Introducción Que un proceso verifique la condición de acceso a la CR sólo cuando esta podría llegar a ser verdadera requiere soporte desde el Sistema Operativo. Por lo tanto, las primitivas de sincronización existen para anular la espera activa y son utilizadas: para exclusión mutua para proporcionar orden entre varias operaciones de diferentes hilos. Aunque existen muchos tipos de sincronización, construidos en varios lenguajes de programación, dos de ellos son los más prevalecientes: semáforos y monitores. FCC-BUAP 3

4 Semáforos Dijkstra propuso el concepto de semáforo que soluciona el problema de espera activa. Un semáforo tiene dos campos, su valor y una cola de procesos bloqueados, así como dos operaciones asociadas a este: P() y V() La semántica de un semáforo binario se muestra en el siguiente programa: FCC-BUAP 4

5 Semáforos public class SemaforoBinario boolean value; SemaforoBinario( boolean initvalue ) value = initvalue public synchronized void P() while( value == false ) Util.myWait(this); //en cola de procesos bloqueados value = false; public synchronized void V() value = true; notify(); FCC-BUAP 5

6 Funcionamiento El contenido de value de un semáforo (o semáforo binario) sólo puede ser falso o verdadero. La cola de procesos bloqueados está vacía inicialmente y un proceso puede añadirse a sí mismo a la cola cuando este realiza una llamada a P(). Cuando un proceso llama a P() y value es verdadero, entonces el valor de value se convierte en falso. Sin embargo, si el valor del semáforo es falso, entonces el procesos se bloquea (línea 10) hasta que este llega a ser verdadero. La invocación a Util.myWait() (línea 11) consigue esto. La clase Util se muestra al final de este documento pero por ahora se asume que esta llamada inserta al proceso que la invocó a la cola de procesos bloqueados. FCC-BUAP 6

7 Funcionamiento Cuando value se hace verdadero, el proceso puede hacerlo falso en la línea 12 y regresar desde P(). La llamada a V() hace a value true y también le notifica al proceso si la cola de procesos dormidos en dicho semáforo es no-vacía. Ahora, implementar exclusión mutua es casi trivial: SemaforoBinario mutex = new SemaforoBinario(true); mutex.p(); criticalsection(); mutex.v(); FCC-BUAP 7

8 Semáforo Contador Otra variante del semáforo le permite a este tomar un entero arbitrario como value. Estos semáforos son llamados semáforos de conteo. Su semántica se muestra a continuación: FCC-BUAP 8

9 Semáforo Contador public class SemaforoContador int value; public SemaforoContador( int initvalue ) value = initvalue; public synchronized void P() value--; if( value < 0 ) Util.myWait( this ); public synchronized void V() value++; if( value <= 0 ) notify(); FCC-BUAP 9

10 Semáforo Contador Los semáforos pueden ser usados para resolver una amplia variedad de problemas de sincronización. Nótese que Java NO proporciona semáforos como base del lenguaje, pero pueden ser implementados fácilmente usando la idea de monitores (de los que se hablará más adelante). FCC-BUAP 10

11 Problema: Productor-Consumidor En este problema, existe un buffer compartido entre dos procesos nombrados el productor y el consumidor: El primero produce artículos que son depositados en un buffer y el consumidor extrae artículos del buffer y los consume. Por simplicidad, se asume que los ítems son del tipo double. Dado que el buffer es compartido, cada proceso debe acceder al buffer de una manera mutuamente excluyente. Por ahora, se usará un arreglo de elementos double de tamaño size como buffer. El buffer tiene dos apuntadores, inbuf y outbuf, los cuales contienen los índices del arreglo para depositar un artículo y extraer un artículo, respectivamente. La variable count da seguimiento al número actual de ítems en el buffer. FCC-BUAP 11

12 Problema: Productor-Consumidor La siguiente figura muestra el buffer como un arreglo circular en el que inbuf y outbuf son incrementados en base al módulo con size para mantener la congruencia de los slots para depositar y extraer artículos. FCC-BUAP 12

13 Problema: Productor-Consumidor Se puede observar que además de la exclusión mutua, existen dos restricciones de sincronización adicionales que necesitan ser satisfechas: 1. El consumidor no debe extraer ningún artículo de un buffer vacío. 2. El productor no debe depositar ningún artículo en un buffer lleno. NOTA: El buffer puede llenarse si el productor se mantiene produciendo a una mayor velocidad de la que el consumidor extrae los artículos. FCC-BUAP 13

14 Problema: Productor-Consumidor Tal forma de sincronización se conoce como sincronización condicional. Esta requiere que un proceso espere por alguna condición que llega a ser verdadera (así como el buffer llega a ser no vacío) antes de continuar sus operaciones. La clase BufferLimitado se muestra a continuación: FCC-BUAP 14

15 Clase BufferLimitado class BufferLimitado final int size = 10; double buffer[] = new double[size]; int inbuf = 0, outbuf = 0; SemaforoBinario mutex = new SemaforoBinario(true); SemaforoContador isempty = new SemaforoContador(0); SemaforoContador isfull = new SemaforoContador( size ); FCC-BUAP 15

16 Clase BufferLimitado public void deposit( double value ) isfull.p(); mutex.p(); // espera si el buffer está lleno // asegura la exclusión mutua buffer[inbuf] = value; inbuf = (inbuf + 1) % size; mutex.v(); isempty.v(); // notifica a algún consumidor en espera FCC-BUAP 16

17 Clase BufferLimitado public double fetch() double value; isempty.p(); mutex.p(); value = biffer[outbuf]; // esperar si el buffer está vacío // asegura la exclusión mutua // lee desde el buffer outbuf = (outbuf+1) % size; mutex.v(); isfull.v(); // notifica a cualquier productor en espera return value; FCC-BUAP 17

18 Problema: Productor-Consumidor Aquí se utiliza un semáforo de exclusión mutua para asegurar que todas las variables compartidas son accedidas de manera mutuamente excluyente. El semáforo de conteo isfull es utilizado para hacer que un productor espere en caso de que el buffer esté lleno, y el semáforo isempty es utilizado para hacer que un consumidor espere cuando el buffer está vacío. En el método deposit, de la línea 9 se verifica si el buffer está lleno. Si es así, el proceso hace una llamada y espera usando el semáforo isfull. FCC-BUAP 18

19 Problema: Productor-Consumidor Nótese que este semáforo ha sido inicializado de acuerdo al valor de size, y por lo tanto en ausencia de un consumidor, primero size llama a isfull.p() para que no se bloquee. En este punto, el buffer estaría lleno y cualquier llamada a isfull.p() haría posible el bloqueo. Si la llamada a isfull.p() no bloquea, entonces es posible acceder a la CR para utilizar el buffer compartido. La llamada mutex.p() en la línea 12 sirve como entrada a la CR, y mutex.v() sirve como salida de la CR. FCC-BUAP 19

20 Problema: Productor-Consumidor Aquí se utiliza un semáforo de exclusión mutua para asegurar que todas las variables compartidas son accedidas de manera mutuamente excluyente. El semáforo de conteo isfull es utilizado para hacer que un productor espere en caso de que el buffer esté lleno, y el semáforo isempty es utilizado para hacer que un consumidor espere cuando el buffer está vacío. En el método deposit, de la línea 9 se verifica si el buffer está lleno. Si es así, el proceso hace una llamada y espera usando el semáforo isfull. FCC-BUAP 20

21 Problema: Productor-Consumidor Una dentro de la CR, se deposita el valor en el buffer usando el índice inbuf de la línea 13. En la línea 15 se hace una llamada a isempty.v() para despertar a cualquier consumidor que pueda estar esperando debido a que el buffer estaba vacío. El método fetch es el complemento del método deposit. La clase BufferLimitado puede ser probada mediante el programa productor-consumidor mostrado a continuación. FCC-BUAP 21

22 Clase Productor import java.util.random; class Productor implements Runnable BufferLimitado b = null; public Productor( BufferLimitado initb ) b = initb; new Thread( this ).start(); public void run() double item; Random r = new Random(); while( true ) item = r.nextdouble(); System.out.println( Artículo producido + ítem ); b.deposit( item ); Util.mySleep(200); FCC-BUAP 22

23 Clase Consumidor class Consumidor implements Runnable BufferLimitado b = null; public Consumidor( BufferLimitado initb ) b = initb; new Thread( this ).start(); public void run() double item; while( true ) item = b.fetch(); System.out.println( Artículo extraído + item ); Util.mySleep(50); FCC-BUAP 23

24 Clase ProductorConsumidor class ProductorConsumidor public static void main(string args[]) BufferLimitado buffer = new BufferLimitado(); Productor productor = new Productor( buffer ); Consumidor = new Consumidor( buffer ); FCC-BUAP 24

25 Monitores Un Monitor es un objeto de alto nivel orientado a la construcción para la sincronización en programación concurrente. Un monitor puede ser visto como una clase que puede ser usada en programas concurrentes. Como cualquier clase, un monitor tiene atributos y métodos para manipular dichos datos. FCC-BUAP 25

26 Monitores Debido a que múltiples hilos pueden acceder a datos compartidos al mismo tiempo, los monitores soportan la noción de métodos de ingreso para garantizar la exclusión mutua. Esto garantiza que sólo uno de los hilos puede ser ejecutado en cualquier método de ingreso en cualquier momento. Algunas veces la frase el hilo t está dentro del monitor es utilizada para denotar que el hilo t está ejecutándose un método de ingreso. Es claro que a lo más un hilo puede estar en el monitor en cualquier momento, entonces cualquier objeto monitor asociado es una cola de hilos que están esperando a entrar al monitor. FCC-BUAP 26

27 Monitores En el estudio y uso de los semáforos se puede ver que las llamadas a las funciones necesarias para utilizarlos quedan repartidas en el código del programa, haciendo difícil corregir errores y asegurar el buen funcionamiento de los algoritmos. Para evitar estos inconvenientes se desarrollaron los monitores. El concepto de monitor fue definido por primera vez por Charles Antony Richard Hoare en el artículo Monitors: An Operating System Structuring Concept de FCC-BUAP 27

28 Monitores Como hemos visto antes, los programas concurrentes también requieren sincronización condicional cuando un hilo debe esperar por determinada condición que llegará a ser verdadera. Para dirigir la sincronización condicional, el constructor del monitor soporta la noción de variables de condición. Una variable de condición tiene dos operaciones definidas: wait y notify (también conocida como signal). FCC-BUAP 28

29 Monitores Para cualquier variable de condición x, cualquier hilo, por decir t 1, realiza una llamada a x.wait() y se bloquea y coloca dentro de una cola asociada con x. Cuando otro hilo, por decir t 2, realiza una llamada a x.notify(). Si la cola asociada con x es no-vacía, un hilo es removido de una cola e insertado en otra cola de hilos disponibles para ser ejecutados. Dado que a lo más un hilo puede estar en el monitor, esto inmediatamente genera un problema: cuál hilo debe continuar después de la operación de notificación? aquel que invoque al método notify o el hilo que estuvo esperando más tiempo?. FCC-BUAP 29

30 Monitores Existen dos posibles respuestas: 1. Continúa su ejecución uno de los hilos que estuvo esperando sobre la variable de condición. Los Monitores que siguen esta regla son conocidos como Monitores Hoare. 2. Continúa con su ejecución el hilo que hizo la llamada de notificación. Cuando este hilo sale del monitor, entonces otros hilos pueden entrar al monitor. Esta es la semántica que se sigue en Java. Una ventaja del Monitor de Hoare s es que el hilo que fue notificado sobre la condición comienza su ejecución sin intervención de cualquier otro hilo. FCC-BUAP 30

31 Monitores Por lo tanto, el estado en el que este hilo comienza su ejecución es el mismo que cuando notify fue llamado. Al despertar, este puede asumir que la condición es verdadera. En consecuencia, para usar un monitor de Hoare s, el código de un hilo puede ser: if ( B) x.wait(); FCC-BUAP 31

32 Monitores Asumiendo que t 2 notifica sólo cuando B es verdadero, podemos saber que t 1 puede asumir B al despertar. En un monitor estilo Java, a pesar de que t 2 emite la notificación, este continúa su ejecución. Por lo tanto, cuando t 1 obtiene su turno de ejecutarse, la condición B puede ya no ser verdad más. De aquí que, cuando usamos Java, los hilos esperan usualmente por la condición como: while ( B ) x.wait( ); El hilo t 1 puede tomar un notify()sólo como una señal o indicio de que B puede ser verdadero. Por ende, este necesita verificar explícitamente la veracidad de B cuando este despierto. Si B es falso actualmente, este invoca a wait()de nuevo. FCC-BUAP 32

33 Monitores En Java, especificamos que un objeto es un monitor utilizando la palabra synchronized con sus respectivos métodos. Para obtener sincronización condicional, Java proporciona: wait(): el cual inserta al hilo en la cola de espera. Por simplicidad, se utiliza Util.myWait() en lugar de wait() en Java. La única diferencia es que mywait cacha la InterruptedException. notify(): el cual despierta un hilo de la cola de espera. notifyall(): el cual despierta a todos los hilos de la cola de espera. FCC-BUAP 33

34 Monitores Java no tiene variables de condición. Por lo que las asociadas con cada objeto hay una simple cola wait. Esto es suficiente para la mayoría de las necesidades de programación. Si se necesita, también es fácil simular variables de condición en Java. Una representación gráfica de un monitor en Java se muestra a continuación. Existen dos tipos de colas asociadas con un objeto: una cola de hilos esperando por el bloqueo asociado con el monitor y otra cola de hilos esperando por que la condición llegue a ser verdadera. FCC-BUAP 34

35 Monitores Esto permite resolver algunos problemas de sincronización con Monitores en Java. Por ejemplo, el problema del Productor-Consumidor: FCC-BUAP 35

36 Monitores class BoundedBufferMonitor final int sizebuf = 10; double buffer[] = new double[sizebuf]; int inbuf = 0, outbuf = 0, count = 0; public synchronized void deposit( double value ) while( count == sizebuf ) Util.myWait( this ); buffer[inbuf] = value; inbuf = ( inbuf + 1 ) % sizebuf; count++; if( count == 1 ) notify(); // buffer lleno // items disponibles para extraer FCC-BUAP 36

37 Monitores public synchronized double fetch( ) double value; while( count == 0 ) // buffer vacío Util.myWait( this ); value = buffer[outbuf]; outbuf = ( outbuf + 1 ) % sizebuf; count--; if( count == sizebuf - 1 ) // slots vacíos disponibles notify(); return value; FCC-BUAP 37

38 Monitores La clase BoundedBufferMonitor mostrada anteriormente tiene dos métodos de ingreso: deposit y fetch. Esto significa que si un hilo está ejecutando al método deposit o fetch, entonces ningún otro hilo puede ejecutar dichos métodos. La palabra reservada synchronized permite la exclusión mutua durante el acceso a las variables compartidas y corresponde a obtener el monitor de bloqueo. FCC-BUAP 38

39 Monitores Enfocándonos en el método deposit en la línea 8, si el buffer está lleno (i.e. count igual a sizebuf), entonces el hilo que llamó a deposit debe esperar a que se consuma un ítem y quede libre al menos un slot en el buffer. Por lo tanto, este invoca al método mywait(). Cuando un hilo espera por la condición, éste se va a una cola esperando a ser notificado por alguno otro hilo. Éste también debe liberar el monitor de bloqueo para que otro proceso pueda acceder al monitor y hacer verdadera la condición por la cual este hilo esta esperando. Cuando este hilo es notificado, éste tiene que adquirir el monitor de bloqueo de nuevo antes de continuar su ejecución. FCC-BUAP 39

40 Monitores Ahora asume que la condición en la sentencia while de la línea 8 es falsa. Entonces value puede ser depositado en el buffer. La variable inbuf apunta al rabo de la cola circular buffer. Éste avanza después de la inserción y el contador del número de ítems es incrementado. Aún no hemos terminado realmente. Mientras se diseña un monitor, es posible que sea necesario asegurarse que si algún hilo está esperando por una condición que pueda llegar a ser verdadera, entonces dicho hilo debe ser notificado. FCC-BUAP 40

41 Monitores En este caso, un hilo consumidor puede estar esperando en el método fetch por que algún ítem esté disponible. Finalmente, si el contador es 1, se notifica a cualquier hilo en espera en la línea 14. FCC-BUAP 41

42 Clase Util import java.util.*; public class Util public static int max(int a, int b) if( a > b ) return a; return b; Public static void mysleep(int time) try Thread.sleep(time); catch(interruptedexception e) public static void mywait(object obj) System.out.println( waiting ); try obj.wait(); catch(interruptedexception e) FCC-BUAP 42

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

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

MONITORES EN JAVA. Antonio Tomeu Control de la Concurrencia en Java: API Estándar MONITORES EN JAVA Un monitor es un objeto que implementa acceso bajo e.m. a todos sus métodos, y provee sincronización En Java, son objetos de una clase cuyos métodos públicos son todos synchronized Un

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

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

Programación Concurrente y Paralela. P(S) ; sección crítica P(S); 2.5.2 Monitores Los semáforos, a pesar de su sencillez de uso, son el equivalente a las instrucciones goto y el manejo de apuntadores en los lenguajes de programación imperativos: son muy susceptibles

Más detalles

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 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

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

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

Programación Concurrente en Java: Threads. Ejemplos de programación concurrente. Luis Fernando Llana Díaz. 24 de abril de 2008

Programación Concurrente en Java: Threads. Ejemplos de programación concurrente. Luis Fernando Llana Díaz. 24 de abril de 2008 Departamento de Sistemas Informáticos y Computación Universidad Complutense de Madrid de abril de 00 Ejemplos de programación concurrente En un sistema operativo, diversos programas compiten por los recursos

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

SINCRONIZACIÓN DE PROCESOS

SINCRONIZACIÓN DE PROCESOS SINCRONIZACIÓN DE PROCESOS 1 Introducción Los procesos acceden a datos o recursos compartidos El acceso puede provocar que el estado final de los datos no sea correcto, generando incoherencias debido a

Más detalles

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

Threads. La plataforma JAVA soporta programas multhreading a través del lenguaje, de librerías y del sistema de ejecución. Dos. Threads Un thread es un flujo de control secuencial dentro de un programa. A los threads también se los conoce como procesos livianos ó contextos de ejecución. Un thread es similar a un programa secuencial:

Más detalles

Programación Concurrente en Java

Programación Concurrente en Java Hebras y monitores Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid 21 de marzo de 2006 Threads Extendiendo la clase java.lang.thread. public class PrThread extends

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

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

TEMA 5: Control de la Concurrencia en Java (API Estándar) 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

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

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

Estados de un proceso

Estados de un proceso Semáforos Estados de un proceso Inactivo Listo Ejecutando Completo Escribimos p.state := ready p. state := running Bloqueado Para indicar que un proceso cambia de estado Semáforo Es un tipo de dato abstracto

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) [email protected] Programación concurrente

Más detalles

MECANISMOS DE SINCRONIZACIÓN PROGRAMACIÓN CONCURRENTE Y PARALELA

MECANISMOS DE SINCRONIZACIÓN PROGRAMACIÓN CONCURRENTE Y PARALELA MECANISMOS DE SINCRONIZACIÓN PROGRAMACIÓN CONCURRENTE Y PARALELA Sincronización El problema de la sincronización de hilos tiene lugar cuando varios hilos intentan acceder al mismo recurso o dato. A la

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

Java: Programación Multithread

Java: Programación Multithread Qué es un thread? Java: Programación Multithread Hasta el momento hemos desarrollado programas secuenciales con un único thread: en cualquier instante durante la ejecución de un programa hay un único punto

Más detalles

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

75-62 Técnicas de Programación Concurrente II 2004 java Threads 75-62 Técnicas de Programación Concurrente II 2004 java Threads FIUBA Ing. Osvaldo Clúa Bibliografía: tutorial de Java en http://java.sun.com Un buen libro (algo teórico) es Garg: Concurrent and Distributed

Más detalles

PROGRAMACIÓN CONCURRENTE

PROGRAMACIÓN CONCURRENTE PROGRAMACIÓN CONCURRENTE Lenguajes de Programación - Progr. Concurrente 1 Introducción El concepto fundamental de la programación concurrente es la noción de Proceso. Proceso: Cálculo secuencial con su

Más detalles

Procesamiento paralelo con hilos de Java

Procesamiento paralelo con hilos de Java Procesamiento paralelo con hilos de Java Tabla de contenidos 1. Soporte para hilos en Java... 1 2. Creación y control de un hilo... 2 2.1. Métodos de creación de un hilo... 2 2.2. Control de hilos mediante

Más detalles

Programación Concurrente en Java

Programación Concurrente en Java Programación Concurrente en Java Curso 2006-2007 9/2/2007 Prog. Distribuida Bajo Internet Qué es la Programación Concurrente? Diseño basado en varias actividades independientes Conceptualmente se ejecutan

Más detalles

Sincronización de Threads

Sincronización de Threads Sincronización de Threads Herramientas y Lenguajes de Programación Universidad de La Laguna Programa de Doctorado de Física e Informática Escuela Técnica Superior Superior de Ingeniería Informática Dpto.

Más detalles

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación: Examen de Java Nombre: DNI: Titulación: 1. Cómo podemos compilar desde la línea de comandos la clase Java A que utiliza una librería empaquetada bd.jar? 2. Indica si es correcto el siguiente código. Justifica

Más detalles

Programación Concurrente en Java: Threads

Programación Concurrente en Java: Threads Departamento de Sistemas Informáticos y Computación Universidad Complutense de Madrid 7 de mayo de 007 Ejemplos de programación concurrente En un sistema operativo, diversos programas compiten por los

Más detalles

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

Java nos ofrece la clase Thread y la interfaz Runable que permiten que varios procesos estén funcionando de forma concurrente. Threads (hilos) Java nos ofrece la clase Thread y la interfaz Runable que permiten que varios procesos estén funcionando de forma concurrente. Conceptos: Proceso (thread o hilo): es un programa en ejecución

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 Práctica de Laboratorio No. 5 Profr: María del Carmen Cerón Garnica Alumno: Roberto

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

1 HILOS (THREADS) EN JAVA

1 HILOS (THREADS) EN JAVA 1 HILOS (THREADS) EN JAVA 1.1QUÉ ES UN THREAD La Máquina Virtual Java (JVM) es un sistema multihilo. Es decir, es capaz de ejecutar varios hilos de ejecución simultáneamente. La JVM gestiona todos los

Más detalles

Monitores. Implementación de un Buffer con monitores

Monitores. Implementación de un Buffer con monitores Monitores Los monitores corresponden a la segunda herramienta de sincronización que veremos en el curso. Se usan para garantizar la exclusión mutua en secciones críticas y para esperar la ocurrencia de

Más detalles

PROGRAMACIÓN EN JAVA

PROGRAMACIÓN EN JAVA SISTEMAS INFORMÁTICOS INDUSTRIALES curso 2007-2008 PROGRAMACIÓN EN JAVA PRÁCTICA 3: Comunicación entre tareas. Modelo productor / consumidor. Objetivos Implementar una aplicación en Java en la que existan

Más detalles

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA Estructura de la Información en Programación I.T.I.G., Matemáticas. Curso 2008/2009 Nombre:... Fecha: / 01 / 2009 HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA Esta hoja de ejercicios nos servirá

Más detalles

Grafo acíclico orientado cuyos nodos corresponden a sentencias individuales.

Grafo acíclico orientado cuyos nodos corresponden a sentencias individuales. GRAFOS DE PRECEDENCIA Grafo acíclico orientado cuyos nodos corresponden a sentencias individuales. Un arco de un nodo Si al nodo Sj significa que la sentencia Sj puede ejecutarse sólo cuando ha acabado

Más detalles

Tema III. Multihilo. Desarrollo de Aplicaciones para Internet Curso 12 13

Tema III. Multihilo. Desarrollo de Aplicaciones para Internet Curso 12 13 Tema III. Multihilo Desarrollo de Aplicaciones para Internet Curso 12 13 Índice 1.Introducción 2.Tipos de Concurrencia 3.Hilos en Java 4.Implementación de un SNB i. Sin Hilos ii. Con Hilos iii.con Pool

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

Otras formas de Sincronización en Java

Otras formas de Sincronización en Java 75-62 Técnicas de Programación Concurrentes II Lic. Ing. Osvaldo Clúa 2008 Facultad de Ingeniería Universidad de Buenos Aires Otras formas de Sincronización en Java java.util.concurrent Class Exchanger

Más detalles

Sincronización de Threads

Sincronización de Threads Funciones POSIX III Funciones POSIX III Sincronización Sincronización Procesos Procesos Semáforos Semáforos (sem_t) (sem_t) Sincronización Sincronización Threads Threads Mutex Mutex (pthread_mutex_t) (pthread_mutex_t)

Más detalles

Implementación de monitores POSIX

Implementación de monitores POSIX Implementación de monitores POSIX Ampliación de Sistemas Operativos (prácticas) E.U. Informática en Segovia Universidad de Valladolid Programación concurrente: Problemática Presencia de condiciones de

Más detalles

Clase adicional 2. Estructuras básicas de control. Temas

Clase adicional 2. Estructuras básicas de control. Temas Clase adicional 2 Temas Estructuras de control Sentencia condicional Iteración Clases Definir una clase Crear una instancia de una clase Campos estáticos Problemas de la clase adicional Problema de diseño

Más detalles

Unidad 2: Gestión de Procesos

Unidad 2: Gestión de Procesos Unidad 2: Gestión de Procesos Tema 6, Concurrencia: Exclusión mutua y sincronización. 6.1 Principios generales de concurrencia. 6.2 EM: Soluciones software (Algoritmos de Dekker y Peterson). 6.3 EM: Soluciones

Más detalles

CDI Exclusión mutua a nivel alto. conceptos

CDI Exclusión mutua a nivel alto. conceptos conceptos El concepto de usar estructuras de datos a nivel alto libera al programador de los detalles de su implementación. El programador puede asumir que las operaciones están implementadas correctamente

Más detalles

Concurrencia en Java

Concurrencia en Java Concurrencia en Java Concurrencia y Distribución Programación Avanzada Posgrado en Ciencia e Ingeniería de la Computación, UNAM 1. El mecanismo de threads Una aplicación Java o applet puede contener secciones

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

Hebras y Sincronización en Java

Hebras y Sincronización en Java Hebras y Sincronización en Java Jonathan Makuc http://jmakuc.ublog.cl Noviembre 2008 Tópicos: 1. Introducción a hebras en Java...2 2. Hebras a través del clase Thread...3 3. Hebras a través de la interfaz

Más detalles

7. Programación Concurrente

7. Programación Concurrente 7. Programación Concurrente 1. Qué es la programación concurrente? Se conoce por programación concurrente a la rama de la informática que trata de las técnicas de programación que se usan para expresar

Más detalles

Práctica 4 Concurrencia en Java

Práctica 4 Concurrencia en Java Práctica 4 Concurrencia en Java Escuela de Ingeniería y Arquitectura Depto. de Informática e Ingeniería de Sistemas 1. Objetivos 1. Crear y manipular hilos de ejecución en Java 2. Utilizar monitores en

Más detalles

Programación Concurrente y Paralela. Unidad 1 Introducción

Programación Concurrente y Paralela. Unidad 1 Introducción Programación Concurrente y Paralela Unidad 1 Introducción Contenido 1.1 Concepto de Concurrencia 1.2 Exclusión Mutua y Sincronización 1.3 Corrección en Sistemas Concurrentes 1.4 Consideraciones sobre el

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

CAPÍTULO III: Programación Concurrente en JAVA I: Programación con hilos

CAPÍTULO III: Programación Concurrente en JAVA I: Programación con hilos CAPÍTULO III: Programación Concurrente en JAVA I: Programación con hilos III. PROGRAMACION CON HILOS (THREADS) EN JAVA Java contiene una serie de clases y construcciones específicas para programar de forma

Más detalles

Ejercicios con Monitores

Ejercicios con Monitores Ejercicios con Monitores 57. Aunque un monitor garantiza la exclusión mutua, los procedimientos tienen que ser reentrantes. Explicar por qué. 58. Demostrar que incluso si la implementación del semáforo

Más detalles

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

Receta general para resolver problemas de sincronización con semáforos Receta general para resolver problemas de sincronización con semáforos La primera vez que te enfrentas a la tarea de implementar una solución a un problema de sincronización entre procesos, es normal que

Más detalles

SEMAFOROS. if hay procesos suspendidos en este semáforo then despertar a uno de ellos else S = S + 1

SEMAFOROS. if hay procesos suspendidos en este semáforo then despertar a uno de ellos else S = S + 1 1 de 21 22/12/2007 21:48 SEMAFOROS 1. DEFINICIONES 1.1. Semáforo general 1.2. Semáforo binario 1.3. Semáforo con cola de procesos bloqueados 1.4. Semáforo con espera activa (busy-wait) 1.5. Consecuencias

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

Concurso: Cuánto sabes de JAVA?

Concurso: Cuánto sabes de JAVA? Concurso: Cuánto sabes de JAVA? Motivación: o Para cambiar el ritmo de las jornadas y que no todas las actividades sean charlas o Recordar conocimientos y aprender algo nuevo. o Las preguntas pueden ayudarnos

Más detalles

Introducción a Java LSUB. 30 de enero de 2013 GSYC

Introducción a Java LSUB. 30 de enero de 2013 GSYC Introducción a Java LSUB GSYC 30 de enero de 2013 (cc) 2013 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial

Más detalles

Programación Orientada a Eventos

Programación Orientada a Eventos Programación Orientada a Eventos Técnicas de Programación Santiago Pavón V:2012.03.13 Programas Secuénciales El flujo de ejecución del programa sigue la secuencia de sentencias que lo forman. El estado

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

Concurrencia entre Procesos.

Concurrencia entre Procesos. Concurrencia entre Procesos. Sistemas Operativos Tema 3. 1 Procesamiento concurrente. Procesamiento concurrente: base de los sistemas operativos modernos (multiprogramados): Un conjunto de procesos que

Más detalles

Docente: Juan Carlos Pérez P. Alumno : Fecha : Nota:

Docente: Juan Carlos Pérez P. Alumno : Fecha : Nota: Docente: Juan Carlos Pérez P. Alumno : Fecha : Nota: Justificación: Se pretende con éste contribuir a que el alumno se inicie y conozca el entorno del IDE en la creación de pequeños programas en java Objetivos:

Más detalles

Secretos de la Programación Concurrente

Secretos de la Programación Concurrente Secretos de la Programación Concurrente Stuart Perez, Luis Castro Autómatas y Compiladores, Escuela de Ciencias de la Computación e Informática, San Pedro de Montes de Oca, Costa Rica [email protected]

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

Sistemas Operativos. Procesos

Sistemas Operativos. Procesos Sistemas Operativos Procesos Agenda Proceso. Definición de proceso. Contador de programa. Memoria de los procesos. Estados de los procesos. Transiciones entre los estados. Bloque descriptor de proceso

Más detalles

Palabras reservadas de C++ y C. Una palabra reservada no puede declararse como un identificador, esto haría un conflicto entre conectores y funciones.

Palabras reservadas de C++ y C. Una palabra reservada no puede declararse como un identificador, esto haría un conflicto entre conectores y funciones. Palabras reservadas de C++ y C Una palabra reservada no puede declararse como un identificador, esto haría un conflicto entre conectores y funciones. A continuación se muestra el link del listado de palabras

Más detalles

Java. Introducción a la Programación Orientada a Objetos

Java. Introducción a la Programación Orientada a Objetos Java Java es un lenguaje de programación presentado en 1995 enfocado a: soportar los fundamentos de la programación orientada a objetos. generar código independiente de la arquitectura de la computadora

Más detalles

Concurrencia: Exclusión mutua y Sincronización

Concurrencia: Exclusión mutua y Sincronización Concurrencia: Exclusión mutua y Sincronización Prof. Carlos Figueira Basado en materiales de Yudith Cardinale (USB) Williams Stallings, Eugene Styer Concurrencia Múltiples aplicaciones Aplicaciones estructuradas

Más detalles

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

Concurrencia: deberes. Concurrencia: Exclusión Mutua y Sincronización. Concurrencia. Dificultades con la Concurrencia Concurrencia: deberes Concurrencia: Exclusión Mutua y Sincronización Capítulo 5 Comunicación entre procesos Compartir recursos Sincronización de múltiples procesos Asignación del tiempo de procesador Concurrencia

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

Tema 7.- Fundamentos de la Programación Orientada a Objetos

Tema 7.- Fundamentos de la Programación Orientada a Objetos Tema 7.- Fundamentos de la Programación Orientada a Objetos 7 de enero de 2014 Objetivos Saber definir clases propias. Saber crear objetos de una clase determinada e interactuar con ellos (Problema 1).

Más detalles

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

Programación Concurrente. Curso Java 2012, 2013 Juan Manuel Fernández Peña Programación Concurrente Curso Java 2012, 2013 Juan Manuel Fernández Peña Programación secuencial Hasta ahora se ha trabajado con programas secuenciales Se ejecuta paso a paso Son deterministas: si se

Más detalles

Prueba N o 1. Programación II

Prueba N o 1. Programación II UNIVERSIDAD ANDRÉS BELLO 1 Prueba N o 1 Programación II Profesores: José Luis Allende y Carlos Beyzaga. Fecha: 10 de Septiembre de 2013 Nombre: Nota: Instrucciones: Coloque su nombre a todas las hojas.

Más detalles

! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes

! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes Introducción Programación orientada a objetos Curso INEM. Programación en Java Santiago Muelas Pascual [email protected]! Qué es la POO?! Un paradigma de programación! Un paradigma es una forma de afrontar

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

Concurrencia en Java

Concurrencia en Java Concurrencia en Java Herramientas proporcionadas por Java La Máquina Virtual (JVM) Pedro Pablo Gómez Martín La clase Thread Clase principal con la que conseguir concurrencia. La llamada a su método start()

Más detalles

Tema 7- Modelo y Aplicación de Pila, Cola y. Tema 7- Modelo y Aplicación de. Lista Con Punto de Interés

Tema 7- Modelo y Aplicación de Pila, Cola y. Tema 7- Modelo y Aplicación de. Lista Con Punto de Interés Tema - Modelo y Aplicación de Pila, Cola y Lista con Punto de Interés Tema - Modelo y Aplicación de Pila, Cola y Lista con Punto de Interés Índice general:. Modelo y Aplicación de Lista con Punto de Interés

Más detalles

Ejercicios de Hilos. Índice

Ejercicios de Hilos. Índice Índice 1 Creación de hilos (0.5 puntos)...2 2 Prioridades (0.5 puntos)... 2 3 Productor/Consumidor (1 punto)...2 4 Pool de hilos (1 punto)... 3 1. Creación de hilos (0.5 puntos) En la clase Ej1 se crean

Más detalles

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

CAPÍTULO 8. Comunicación y sincronización basada en variables compartidas CAPÍTULO 8. Comunicación y sincronización basada en variables compartidas 8 Comunicación y sincronización basada en variables compartidas...2 8.1 Exclusión mutua y condición de sincronización....2 8.2

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

Test SITR Temas: Planificación, Sincronización, Comunicación entre Procesos, Relojes, Señales, Temporizadores (TestSITR_T4 T9)

Test SITR Temas: Planificación, Sincronización, Comunicación entre Procesos, Relojes, Señales, Temporizadores (TestSITR_T4 T9) Test SITR Temas: Planificación, Sincronización, Comunicación entre Procesos, Relojes, Señales, Temporizadores (TestSITR_T4 T9) Temas: Planificación Sincronización y Comunicación entre Procesos Funciones

Más detalles

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A.

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A. SISTEMAS INFORMÁTICOS I Junio 2003 INGENIERÍA EN INFORMÁTICA - Código Carrera 55 - Código Asignatura 077 Tipo de Examen: A NO SE PERMITE EL USO DE NINGÚN MATERIAL Tiempo: 2 horas Apellidos: Nombre: DNI:

Más detalles

Lecturas: Ben-Ari, secciones 4.1, 4.2, 4.3, 4.6 Andrews, intro. cap. 4 y sección 4.1. Exclusión mutua con semáforos

Lecturas: Ben-Ari, secciones 4.1, 4.2, 4.3, 4.6 Andrews, intro. cap. 4 y sección 4.1. Exclusión mutua con semáforos Lecturas: Ben-Ari, secciones 4.1, 4.2, 4.3, 4.6 Andrews, intro. cap. 4 y sección 4.1 Manuel Carro Universidad Politécnica de Madrid Este texto se distribuye bajo los términos de la Creative Commons License

Más detalles

3.3 Conceptos Básicos del Lenguaje Java

3.3 Conceptos Básicos del Lenguaje Java 3.3 Conceptos Básicos del Lenguaje Java Conjunto de Caracteres Java utiliza Unicode, un conjunto de caracteres de 16 bits Java permite leer ASCII de 7-bit o Latin-1, conviertiéndolo a Unicode Son pocos

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

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

Cada examen debe superarse con al menos un 4 para hacer media. Concurrencia Pau Arlandis Martinez Sobre las normas Profesores Angel Herranz 2309 Julio Mariño 2308 Cada lunes se entregará un problema que debe resolverse antes del jueves. Únicamente sirven para practicar

Más detalles

Federico Peinado www.federicopeinado.es

Federico Peinado www.federicopeinado.es Federico Peinado www.federicopeinado.es Depto. de Ingeniería del Software e Inteligencia Artificial disia.fdi.ucm.es Facultad de Informática www.fdi.ucm.es Universidad Complutense de Madrid www.ucm.es

Más detalles

INTERFACE LIST DEL API JAVA. CLASES ARRAYLIST, LINKEDLIST, STACK, VECTOR. EJEMPLO CON ARRAYLIST. (CU00920C)

INTERFACE LIST DEL API JAVA. CLASES ARRAYLIST, LINKEDLIST, STACK, VECTOR. EJEMPLO CON ARRAYLIST. (CU00920C) APRENDERAPROGRAMAR.COM INTERFACE LIST DEL API JAVA. CLASES ARRAYLIST, LINKEDLIST, STACK, VECTOR. EJEMPLO CON ARRAYLIST. (CU00920C) Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado

Más detalles

Semáforos. Lecturas: Ben-Ari, secciones 4.1, 4.2, 4.3, 4.6 Andrews, intro. cap. 4 y sección 4.1. Exclusión mutua con semáforos

Semáforos. Lecturas: Ben-Ari, secciones 4.1, 4.2, 4.3, 4.6 Andrews, intro. cap. 4 y sección 4.1. Exclusión mutua con semáforos Lecturas: Ben-Ari, secciones 4.1, 4.2, 4.3, 4.6 Andrews, intro. cap. 4 y sección 4.1 Manuel Carro Universidad Politécnica de Madrid Este texto se distribuye bajo los términos de la Creative Commons License

Más detalles

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

Cada examen debe superarse con al menos un 4 para hacer media. Concurrencia Pau Arlandis Martínez Sobre las normas Profesores Ángel Herranz 2309 Julio Mariño 2308 Cada lunes se entregará un problema que debe resolverse antes del jueves. Únicamente sirven para practicar

Más detalles

PROGRAMACION CONCURRENTE

PROGRAMACION CONCURRENTE PROGRAMACION CONCURRENTE II.3 Sincronización basada en memoria compartida: Semáforos J.M. Drake 1 Procesos concurrentes y memoria compartida. Si los diferentes procesos de un programa concurrente tienen

Más detalles

INDICE Prologo 1 Recorrido rápido de java 2 Clases y objetos 3 Extensión de clases

INDICE Prologo 1 Recorrido rápido de java 2 Clases y objetos 3 Extensión de clases INDICE Prologo XIII 1 Recorrido rápido de java 1.1. Para empezar 1 1.2. Variables 2 1.3. Comentarios en el condigo 1.4. Constantes con nombre 5 1.4.1. Caracteres Unicode 6 1.5. Flujo de control 7 1.6.

Más detalles

Mensajes. Interbloqueo

Mensajes. Interbloqueo CONCURRENCIA DE PROCESOS Preparado por: Angel Chata Tintaya ([email protected]) Resumen Los procesos comparten variables globales, comparten y compiten por recursos, se ejecutan simultáneamente intercalándose

Más detalles