Sesión 17: Monitores Introducción · (es.upm.babel.cclib.Monitor),conpeque˜nas –...

48
Sesi´ on 17: Monitores – Introducci´ on Julio Mari˜ no abril 2020 Concurrencia 2019/2020 Universidad Polit´ ecnica de Madrid Grado en Ingenier´ ıa Inform´ atica Grado en Matem´ aticas e Inform´ atica 2ble. grado en Ing. Inform´ atica y ADE http://babel.upm.es/teaching/concurrencia Mari˜ no (UPM) Sesi´ on 17: Monitores I Concurrencia, abril 2020 1 / 10

Transcript of Sesión 17: Monitores Introducción · (es.upm.babel.cclib.Monitor),conpeque˜nas –...

  • Sesión 17: Monitores – IntroducciónJulio Mariñoabril 2020

    Concurrencia 2019/2020Universidad Politécnica de MadridGrado en Ingenieŕıa InformáticaGrado en Matemáticas e Informática2ble. grado en Ing. Informática y ADEhttp://babel.upm.es/teaching/concurrencia

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 1 / 10

    http://babel.upm.es/teaching/concurrencia

  • introducción/motivaciónbuscando mecanismos de más alto nivel

    En los años 70 se hicieron varias propuestas de mecanismos de sincronización que fueranmás allá de los semáforos y que encajasen mejor en las ideas de programaciónestructurada que se iban imponiendo.Per Brinch-Hansen en 1973 y C.A.R. Hoare en 1974 hicieron propuestas que teńıan encomún el tratar de manera separada la exclusión mutua y la sincronización por condición.El concepto de monitor influyó en el diseño de los mecanismos de sincronizaciónoriginales de Java si bien la libreŕıa más fiel a la propuesta original es la llamada Locks &Conditions.En este curso usaremos nuestra propia libreŕıa de monitores(es.upm.babel.cclib.Monitor), con pequeñas – pero relevantes – diferencias con la queviene con Java.

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 2 / 10

  • introducción/motivaciónbuscando mecanismos de más alto nivel

    En los años 70 se hicieron varias propuestas de mecanismos de sincronización que fueranmás allá de los semáforos y que encajasen mejor en las ideas de programaciónestructurada que se iban imponiendo.Per Brinch-Hansen en 1973 y C.A.R. Hoare en 1974 hicieron propuestas que teńıan encomún el tratar de manera separada la exclusión mutua y la sincronización por condición.El concepto de monitor influyó en el diseño de los mecanismos de sincronizaciónoriginales de Java si bien la libreŕıa más fiel a la propuesta original es la llamada Locks &Conditions.En este curso usaremos nuestra propia libreŕıa de monitores(es.upm.babel.cclib.Monitor), con pequeñas – pero relevantes – diferencias con la queviene con Java.

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 2 / 10

  • introducción/motivaciónbuscando mecanismos de más alto nivel

    En los años 70 se hicieron varias propuestas de mecanismos de sincronización que fueranmás allá de los semáforos y que encajasen mejor en las ideas de programaciónestructurada que se iban imponiendo.Per Brinch-Hansen en 1973 y C.A.R. Hoare en 1974 hicieron propuestas que teńıan encomún el tratar de manera separada la exclusión mutua y la sincronización por condición.El concepto de monitor influyó en el diseño de los mecanismos de sincronizaciónoriginales de Java si bien la libreŕıa más fiel a la propuesta original es la llamada Locks &Conditions.En este curso usaremos nuestra propia libreŕıa de monitores(es.upm.babel.cclib.Monitor), con pequeñas – pero relevantes – diferencias con la queviene con Java.

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 2 / 10

  • introducción/motivaciónbuscando mecanismos de más alto nivel

    En los años 70 se hicieron varias propuestas de mecanismos de sincronización que fueranmás allá de los semáforos y que encajasen mejor en las ideas de programaciónestructurada que se iban imponiendo.Per Brinch-Hansen en 1973 y C.A.R. Hoare en 1974 hicieron propuestas que teńıan encomún el tratar de manera separada la exclusión mutua y la sincronización por condición.El concepto de monitor influyó en el diseño de los mecanismos de sincronizaciónoriginales de Java si bien la libreŕıa más fiel a la propuesta original es la llamada Locks &Conditions.En este curso usaremos nuestra propia libreŕıa de monitores(es.upm.babel.cclib.Monitor), con pequeñas – pero relevantes – diferencias con la queviene con Java.

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 2 / 10

  • monitoresno tan diferentes de los semáforos, pero separando usos

    La idea fundamental de los monitores consiste en tener dos tipos de entidades. Por unlado, los monitores en śı son los responsables de garantizar la ejecución en exclusiónmutua de ciertos fragmentos de código. Por otra parte, las conditions o condition queuesson las encargadas de manejar la sincronización por condición. En nuestra libreŕıa Java losmonitores son una clase, pero otros lenguajes (incluso SSOO) pueden implementar elconcepto de maneras muy diferentes. Lo que sigue, mientras no se indique lo contrario,se refiere a es.upm.babel.cclib.Monitor.Exclusión mutua: Los objetos de la clase Monitor proporcionan un método para solicitarpermiso de ejecución en exclusión mutua (enter()) y otro método para liberar esepermiso (leave() ). Por ejemplo:mutex = new Monitor ( ) ;mutex . enter ( ) ;mutex . leave ( ) ;A simple vista, un monitor se parece mucho a un semáforo inicializado a uno como losque usábamos para el protocolo de exclusión mutua, pero los monitores solo tienen dosestados: libre y ocupado. Cuando se crea, el monitor está libre. Al hacer enter() sobre unmonitor libre pasa a estar ocupado. El proceso que hace enter() sobre un monitorocupado se bloquea. Hacer leave() sobre un monitor ocupado lo libera si no hay procesosbloqueados en enter() – en caso contrario se desbloquea al más antiguo. No se puedehacer leave() sobre un monitor no adquirido previamente.

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 3 / 10

  • monitoresno tan diferentes de los semáforos, pero separando usos

    La idea fundamental de los monitores consiste en tener dos tipos de entidades. Por unlado, los monitores en śı son los responsables de garantizar la ejecución en exclusiónmutua de ciertos fragmentos de código. Por otra parte, las conditions o condition queuesson las encargadas de manejar la sincronización por condición. En nuestra libreŕıa Java losmonitores son una clase, pero otros lenguajes (incluso SSOO) pueden implementar elconcepto de maneras muy diferentes. Lo que sigue, mientras no se indique lo contrario,se refiere a es.upm.babel.cclib.Monitor.Exclusión mutua: Los objetos de la clase Monitor proporcionan un método para solicitarpermiso de ejecución en exclusión mutua (enter()) y otro método para liberar esepermiso (leave() ). Por ejemplo:mutex = new Monitor ( ) ;mutex . enter ( ) ;mutex . leave ( ) ;A simple vista, un monitor se parece mucho a un semáforo inicializado a uno como losque usábamos para el protocolo de exclusión mutua, pero los monitores solo tienen dosestados: libre y ocupado. Cuando se crea, el monitor está libre. Al hacer enter() sobre unmonitor libre pasa a estar ocupado. El proceso que hace enter() sobre un monitorocupado se bloquea. Hacer leave() sobre un monitor ocupado lo libera si no hay procesosbloqueados en enter() – en caso contrario se desbloquea al más antiguo. No se puedehacer leave() sobre un monitor no adquirido previamente.

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 3 / 10

  • monitoresno tan diferentes de los semáforos, pero separando usos

    La idea fundamental de los monitores consiste en tener dos tipos de entidades. Por unlado, los monitores en śı son los responsables de garantizar la ejecución en exclusiónmutua de ciertos fragmentos de código. Por otra parte, las conditions o condition queuesson las encargadas de manejar la sincronización por condición. En nuestra libreŕıa Java losmonitores son una clase, pero otros lenguajes (incluso SSOO) pueden implementar elconcepto de maneras muy diferentes. Lo que sigue, mientras no se indique lo contrario,se refiere a es.upm.babel.cclib.Monitor.Exclusión mutua: Los objetos de la clase Monitor proporcionan un método para solicitarpermiso de ejecución en exclusión mutua (enter()) y otro método para liberar esepermiso (leave() ). Por ejemplo:mutex = new Monitor ( ) ;mutex . enter ( ) ;mutex . leave ( ) ;A simple vista, un monitor se parece mucho a un semáforo inicializado a uno como losque usábamos para el protocolo de exclusión mutua, pero los monitores solo tienen dosestados: libre y ocupado. Cuando se crea, el monitor está libre. Al hacer enter() sobre unmonitor libre pasa a estar ocupado. El proceso que hace enter() sobre un monitorocupado se bloquea. Hacer leave() sobre un monitor ocupado lo libera si no hay procesosbloqueados en enter() – en caso contrario se desbloquea al más antiguo. No se puedehacer leave() sobre un monitor no adquirido previamente.

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 3 / 10

  • ejemplo: contador compartidosolo exclusión mutuaclass ContadorMon {

    private int cont ;private Monitor mutex ;public ContadorMon ( int n ) {

    this . cont = n ;}public int getValue ( ) {

    int value ;mutex . enter ( ) ;value = this . cont ;mutex . leave ( ) ;return value ;

    }public void inc ( ) {mutex . enter ( ) ;

    this . cont ++;mutex . leave ( ) ;}public void dec ( ) {mutex . enter ( ) ;

    this . cont−−;mutex . leave ( ) ;}

    }

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 4 / 10

  • modelo de ejecuciónvisualizando la exclusión mutua

    ContadorMon

    inc() dec()

    incr(1)

    incr(2)

    incr(3)

    decr(1)

    decr(2)

    decr(3)

    cont 7→ 0

    mutex

    inc()

    inc()

    dec()inc()

    inc()

    dec()

    decr(2)•incr(3)mutex

    inc()cont 7→ 1

    inc()

    dec()

    decr(2)•incr(3)mutex

    cont 7→ 1inc()

    dec()

    incr(3)mutex

    cont 7→ 0inc()

    dec()

    incr(3)mutex

    cont 7→ 0inc() mutex

    cont 7→ 1inc() mutex

    cont 7→ 1

    mutex

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 5 / 10

  • modelo de ejecuciónvisualizando la exclusión mutua

    ContadorMon

    inc() dec()

    incr(1)

    incr(2)

    incr(3)

    decr(1)

    decr(2)

    decr(3)

    cont 7→ 0

    mutex

    inc()

    inc()

    dec()

    inc()

    inc()

    dec()

    decr(2)•incr(3)mutex

    inc()cont 7→ 1

    inc()

    dec()

    decr(2)•incr(3)mutex

    cont 7→ 1inc()

    dec()

    incr(3)mutex

    cont 7→ 0inc()

    dec()

    incr(3)mutex

    cont 7→ 0inc() mutex

    cont 7→ 1inc() mutex

    cont 7→ 1

    mutex

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 5 / 10

  • modelo de ejecuciónvisualizando la exclusión mutua

    ContadorMon

    inc() dec()

    incr(1)

    incr(2)

    incr(3)

    decr(1)

    decr(2)

    decr(3)

    cont 7→ 0

    mutex

    inc()

    inc()

    dec()

    inc()

    inc()

    dec()

    decr(2)•incr(3)mutex

    inc()cont 7→ 1

    inc()

    dec()

    decr(2)•incr(3)mutex

    cont 7→ 1inc()

    dec()

    incr(3)mutex

    cont 7→ 0inc()

    dec()

    incr(3)mutex

    cont 7→ 0inc() mutex

    cont 7→ 1inc() mutex

    cont 7→ 1

    mutex

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 5 / 10

  • modelo de ejecuciónvisualizando la exclusión mutua

    ContadorMon

    inc() dec()

    incr(1)

    incr(2)

    incr(3)

    decr(1)

    decr(2)

    decr(3)

    cont 7→ 0

    mutex

    inc()

    inc()

    dec()inc()

    inc()

    dec()

    decr(2)•incr(3)mutex

    inc()cont 7→ 1

    inc()

    dec()

    decr(2)•incr(3)mutex

    cont 7→ 1inc()

    dec()

    incr(3)mutex

    cont 7→ 0inc()

    dec()

    incr(3)mutex

    cont 7→ 0inc() mutex

    cont 7→ 1inc() mutex

    cont 7→ 1

    mutex

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 5 / 10

  • modelo de ejecuciónvisualizando la exclusión mutua

    ContadorMon

    inc() dec()

    incr(1)

    incr(2)

    incr(3)

    decr(1)

    decr(2)

    decr(3)

    cont 7→ 0

    mutex

    inc()

    inc()

    dec()inc()

    inc()

    dec()

    decr(2)•incr(3)mutex

    inc()cont 7→ 1

    inc()

    dec()

    decr(2)•incr(3)mutex

    cont 7→ 1inc()

    dec()

    incr(3)mutex

    cont 7→ 0inc()

    dec()

    incr(3)mutex

    cont 7→ 0inc() mutex

    cont 7→ 1inc() mutex

    cont 7→ 1

    mutex

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 5 / 10

  • modelo de ejecuciónvisualizando la exclusión mutua

    ContadorMon

    inc() dec()

    incr(1)

    incr(2)

    incr(3)

    decr(1)

    decr(2)

    decr(3)

    cont 7→ 0

    mutex

    inc()

    inc()

    dec()inc()

    inc()

    dec()

    decr(2)•incr(3)mutex

    inc()cont 7→ 1

    inc()

    dec()

    decr(2)•incr(3)mutex

    cont 7→ 1inc()

    dec()

    incr(3)mutex

    cont 7→ 0inc()

    dec()

    incr(3)mutex

    cont 7→ 0inc() mutex

    cont 7→ 1inc() mutex

    cont 7→ 1

    mutex

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 5 / 10

  • modelo de ejecuciónvisualizando la exclusión mutua

    ContadorMon

    inc() dec()

    incr(1)

    incr(2)

    incr(3)

    decr(1)

    decr(2)

    decr(3)

    cont 7→ 0

    mutex

    inc()

    inc()

    dec()inc()

    inc()

    dec()

    decr(2)•incr(3)mutex

    inc()cont 7→ 1

    inc()

    dec()

    decr(2)•incr(3)mutex

    cont 7→ 1inc()

    dec()

    incr(3)mutex

    cont 7→ 0inc()

    dec()

    incr(3)mutex

    cont 7→ 0inc() mutex

    cont 7→ 1inc() mutex

    cont 7→ 1

    mutex

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 5 / 10

  • modelo de ejecuciónvisualizando la exclusión mutua

    ContadorMon

    inc() dec()

    incr(1)

    incr(2)

    incr(3)

    decr(1)

    decr(2)

    decr(3)

    cont 7→ 0

    mutex

    inc()

    inc()

    dec()inc()

    inc()

    dec()

    decr(2)•incr(3)mutex

    inc()cont 7→ 1

    inc()

    dec()

    decr(2)•incr(3)mutex

    cont 7→ 1inc()

    dec()

    incr(3)mutex

    cont 7→ 0inc()

    dec()

    incr(3)mutex

    cont 7→ 0inc() mutex

    cont 7→ 1inc() mutex

    cont 7→ 1

    mutex

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 5 / 10

  • modelo de ejecuciónvisualizando la exclusión mutua

    ContadorMon

    inc() dec()

    incr(1)

    incr(2)

    incr(3)

    decr(1)

    decr(2)

    decr(3)

    cont 7→ 0

    mutex

    inc()

    inc()

    dec()inc()

    inc()

    dec()

    decr(2)•incr(3)mutex

    inc()cont 7→ 1

    inc()

    dec()

    decr(2)•incr(3)mutex

    cont 7→ 1inc()

    dec()

    incr(3)mutex

    cont 7→ 0inc()

    dec()

    incr(3)mutex

    cont 7→ 0inc() mutex

    cont 7→ 1inc() mutex

    cont 7→ 1

    mutex

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 5 / 10

  • monitores (cont.)tratamos ahora la sincronización por condición

    Sincronización por condición: Con cada objeto de clase Monitor podemos asociar objetos(en número variable) de la clase Monitor.Cond que son waitsets con poĺıtica FIFO. Estosobjetos son las condition queues.Las condition queues se construyen a partir de monitores usando el método newCond()de la clase Monitor. Esto garantiza la asociación de cada cola con un único monitor.El bloqueo de hilos se realiza llamando al método await() de la clase Monitor.Cond. Elproceso bloqueado se apunta al final de la cola interna de la condition queue. Paraejecutar await() es imprescindible haber adquirido el monitor asociado con la conditionen cuestión, y el bloqueo conlleva la liberación automática de dicho monitor.¿Cómo se desbloquean los hilos en una condition queue? Otro thread que haya ganadoacceso exclusivo al monitor asociado puede ejecutar el método signal () de la claseMonitor.Cond. Esto saca al primer hilo de la cola y lo coloca al principio de la cola delmonitor. En caso de no haber hilos bloqueados en una condition el signal () no tieneefecto.

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 6 / 10

  • monitores (cont.)tratamos ahora la sincronización por condición

    Sincronización por condición: Con cada objeto de clase Monitor podemos asociar objetos(en número variable) de la clase Monitor.Cond que son waitsets con poĺıtica FIFO. Estosobjetos son las condition queues.Las condition queues se construyen a partir de monitores usando el método newCond()de la clase Monitor. Esto garantiza la asociación de cada cola con un único monitor.El bloqueo de hilos se realiza llamando al método await() de la clase Monitor.Cond. Elproceso bloqueado se apunta al final de la cola interna de la condition queue. Paraejecutar await() es imprescindible haber adquirido el monitor asociado con la conditionen cuestión, y el bloqueo conlleva la liberación automática de dicho monitor.¿Cómo se desbloquean los hilos en una condition queue? Otro thread que haya ganadoacceso exclusivo al monitor asociado puede ejecutar el método signal () de la claseMonitor.Cond. Esto saca al primer hilo de la cola y lo coloca al principio de la cola delmonitor. En caso de no haber hilos bloqueados en una condition el signal () no tieneefecto.

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 6 / 10

  • monitores (cont.)tratamos ahora la sincronización por condición

    Sincronización por condición: Con cada objeto de clase Monitor podemos asociar objetos(en número variable) de la clase Monitor.Cond que son waitsets con poĺıtica FIFO. Estosobjetos son las condition queues.Las condition queues se construyen a partir de monitores usando el método newCond()de la clase Monitor. Esto garantiza la asociación de cada cola con un único monitor.El bloqueo de hilos se realiza llamando al método await() de la clase Monitor.Cond. Elproceso bloqueado se apunta al final de la cola interna de la condition queue. Paraejecutar await() es imprescindible haber adquirido el monitor asociado con la conditionen cuestión, y el bloqueo conlleva la liberación automática de dicho monitor.¿Cómo se desbloquean los hilos en una condition queue? Otro thread que haya ganadoacceso exclusivo al monitor asociado puede ejecutar el método signal () de la claseMonitor.Cond. Esto saca al primer hilo de la cola y lo coloca al principio de la cola delmonitor. En caso de no haber hilos bloqueados en una condition el signal () no tieneefecto.

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 6 / 10

  • monitores (cont.)tratamos ahora la sincronización por condición

    Sincronización por condición: Con cada objeto de clase Monitor podemos asociar objetos(en número variable) de la clase Monitor.Cond que son waitsets con poĺıtica FIFO. Estosobjetos son las condition queues.Las condition queues se construyen a partir de monitores usando el método newCond()de la clase Monitor. Esto garantiza la asociación de cada cola con un único monitor.El bloqueo de hilos se realiza llamando al método await() de la clase Monitor.Cond. Elproceso bloqueado se apunta al final de la cola interna de la condition queue. Paraejecutar await() es imprescindible haber adquirido el monitor asociado con la conditionen cuestión, y el bloqueo conlleva la liberación automática de dicho monitor.¿Cómo se desbloquean los hilos en una condition queue? Otro thread que haya ganadoacceso exclusivo al monitor asociado puede ejecutar el método signal () de la claseMonitor.Cond. Esto saca al primer hilo de la cola y lo coloca al principio de la cola delmonitor. En caso de no haber hilos bloqueados en una condition el signal () no tieneefecto.

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 6 / 10

  • ejemplo: aparcamientoañadimos sincronización por condición al contador compartido

    public class ParkingMon {private Monitor mutex ;private Monitor . Cond esperarHueco ;private int huecos ;private stat ic int CAP = 5 ;public Parking ( ) {mutex = new Monitor ( ) ;esperarHueco = mutex . newCond ( ) ;

    this . huecos = CAP ;}public void entrar ( ) {mutex . enter ( ) ;

    i f ( this . huecos == 0) {esperarHueco . await ( ) ;}this . huecos = this . huecos − 1 ;mutex . leave ( ) ;

    }public void sa l ( ) {mutex . enter ( ) ;

    this . huecos = this . huecos + 1 ;esperarHueco . s i gna l ( ) ;mutex . leave ( ) ;}

    }

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 7 / 10

  • modelo de ejecuciónojo al trasiego entre colas

    ParkingMon

    entrar() salir()

    b ent(1)

    b ent(2)

    b sal(1)

    b sal(2)

    huecos 7→ 1

    mutexmutexespH

    entrar()

    entrar()

    entrar()

    entrar()b ent(2)mutex

    entrar() huecos 7→ 0

    entrar()b ent(2)mutex

    huecos 7→ 0

    entrar()mutex

    huecos 7→ 0

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(1)•b sal(2)mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b ent(2)•b sal(2)mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()b ent(1)mutex

    espH

    huecos 7→ 1entrar()

    mutexespH

    huecos 7→ 0entrar()

    mutexespH

    huecos 7→ 0

    mutexespH

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 8 / 10

  • modelo de ejecuciónojo al trasiego entre colas

    ParkingMon

    entrar() salir()

    b ent(1)

    b ent(2)

    b sal(1)

    b sal(2)

    huecos 7→ 1

    mutexmutexespH

    entrar()

    entrar()

    entrar()

    entrar()b ent(2)mutex

    entrar() huecos 7→ 0

    entrar()b ent(2)mutex

    huecos 7→ 0

    entrar()mutex

    huecos 7→ 0

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(1)•b sal(2)mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b ent(2)•b sal(2)mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()b ent(1)mutex

    espH

    huecos 7→ 1entrar()

    mutexespH

    huecos 7→ 0entrar()

    mutexespH

    huecos 7→ 0

    mutexespH

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 8 / 10

  • modelo de ejecuciónojo al trasiego entre colas

    ParkingMon

    entrar() salir()

    b ent(1)

    b ent(2)

    b sal(1)

    b sal(2)

    huecos 7→ 1

    mutexmutex

    espH

    entrar()

    entrar()

    entrar()

    entrar()b ent(2)mutex

    entrar() huecos 7→ 0

    entrar()b ent(2)mutex

    huecos 7→ 0

    entrar()mutex

    huecos 7→ 0

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(1)•b sal(2)mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b ent(2)•b sal(2)mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()b ent(1)mutex

    espH

    huecos 7→ 1entrar()

    mutexespH

    huecos 7→ 0entrar()

    mutexespH

    huecos 7→ 0

    mutexespH

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 8 / 10

  • modelo de ejecuciónojo al trasiego entre colas

    ParkingMon

    entrar() salir()

    b ent(1)

    b ent(2)

    b sal(1)

    b sal(2)

    huecos 7→ 1

    mutexmutex

    espH

    entrar()

    entrar()

    entrar()

    entrar()b ent(2)mutex

    entrar() huecos 7→ 0

    entrar()b ent(2)mutex

    huecos 7→ 0

    entrar()mutex

    huecos 7→ 0

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(1)•b sal(2)mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b ent(2)•b sal(2)mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()b ent(1)mutex

    espH

    huecos 7→ 1entrar()

    mutexespH

    huecos 7→ 0entrar()

    mutexespH

    huecos 7→ 0

    mutexespH

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 8 / 10

  • modelo de ejecuciónojo al trasiego entre colas

    ParkingMon

    entrar() salir()

    b ent(1)

    b ent(2)

    b sal(1)

    b sal(2)

    huecos 7→ 1

    mutexmutex

    espH

    entrar()

    entrar()

    entrar()

    entrar()b ent(2)mutex

    entrar() huecos 7→ 0

    entrar()b ent(2)mutex

    huecos 7→ 0

    entrar()mutex

    huecos 7→ 0

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(1)•b sal(2)mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b ent(2)•b sal(2)mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()b ent(1)mutex

    espH

    huecos 7→ 1entrar()

    mutexespH

    huecos 7→ 0entrar()

    mutexespH

    huecos 7→ 0

    mutexespH

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 8 / 10

  • modelo de ejecuciónojo al trasiego entre colas

    ParkingMon

    entrar() salir()

    b ent(1)

    b ent(2)

    b sal(1)

    b sal(2)

    huecos 7→ 1

    mutexmutexespH

    entrar()

    entrar()

    entrar()

    entrar()b ent(2)mutex

    entrar() huecos 7→ 0

    entrar()b ent(2)mutex

    huecos 7→ 0

    entrar()mutex

    huecos 7→ 0

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(1)•b sal(2)mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b ent(2)•b sal(2)mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()b ent(1)mutex

    espH

    huecos 7→ 1entrar()

    mutexespH

    huecos 7→ 0entrar()

    mutexespH

    huecos 7→ 0

    mutexespH

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 8 / 10

  • modelo de ejecuciónojo al trasiego entre colas

    ParkingMon

    entrar() salir()

    b ent(1)

    b ent(2)

    b sal(1)

    b sal(2)

    huecos 7→ 1

    mutexmutexespH

    entrar()

    entrar()

    entrar()

    entrar()b ent(2)mutex

    entrar() huecos 7→ 0

    entrar()b ent(2)mutex

    huecos 7→ 0

    entrar()mutex

    huecos 7→ 0

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(1)•b sal(2)mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b ent(2)•b sal(2)mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()b ent(1)mutex

    espH

    huecos 7→ 1entrar()

    mutexespH

    huecos 7→ 0entrar()

    mutexespH

    huecos 7→ 0

    mutexespH

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 8 / 10

  • modelo de ejecuciónojo al trasiego entre colas

    ParkingMon

    entrar() salir()

    b ent(1)

    b ent(2)

    b sal(1)

    b sal(2)

    huecos 7→ 1

    mutexmutexespH

    entrar()

    entrar()

    entrar()

    entrar()b ent(2)mutex

    entrar() huecos 7→ 0

    entrar()b ent(2)mutex

    huecos 7→ 0

    entrar()mutex

    huecos 7→ 0

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(1)•b sal(2)mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b ent(2)•b sal(2)mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()b ent(1)mutex

    espH

    huecos 7→ 1entrar()

    mutexespH

    huecos 7→ 0entrar()

    mutexespH

    huecos 7→ 0

    mutexespH

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 8 / 10

  • modelo de ejecuciónojo al trasiego entre colas

    ParkingMon

    entrar() salir()

    b ent(1)

    b ent(2)

    b sal(1)

    b sal(2)

    huecos 7→ 1

    mutexmutexespH

    entrar()

    entrar()

    entrar()

    entrar()b ent(2)mutex

    entrar() huecos 7→ 0

    entrar()b ent(2)mutex

    huecos 7→ 0

    entrar()mutex

    huecos 7→ 0

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(1)•b sal(2)mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b ent(2)•b sal(2)mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()b ent(1)mutex

    espH

    huecos 7→ 1entrar()

    mutexespH

    huecos 7→ 0entrar()

    mutexespH

    huecos 7→ 0

    mutexespH

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 8 / 10

  • modelo de ejecuciónojo al trasiego entre colas

    ParkingMon

    entrar() salir()

    b ent(1)

    b ent(2)

    b sal(1)

    b sal(2)

    huecos 7→ 1

    mutexmutexespH

    entrar()

    entrar()

    entrar()

    entrar()b ent(2)mutex

    entrar() huecos 7→ 0

    entrar()b ent(2)mutex

    huecos 7→ 0

    entrar()mutex

    huecos 7→ 0

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(1)•b sal(2)mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b ent(2)•b sal(2)mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()b ent(1)mutex

    espH

    huecos 7→ 1entrar()

    mutexespH

    huecos 7→ 0entrar()

    mutexespH

    huecos 7→ 0

    mutexespH

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 8 / 10

  • modelo de ejecuciónojo al trasiego entre colas

    ParkingMon

    entrar() salir()

    b ent(1)

    b ent(2)

    b sal(1)

    b sal(2)

    huecos 7→ 1

    mutexmutexespH

    entrar()

    entrar()

    entrar()

    entrar()b ent(2)mutex

    entrar() huecos 7→ 0

    entrar()b ent(2)mutex

    huecos 7→ 0

    entrar()mutex

    huecos 7→ 0

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(1)•b sal(2)mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b ent(2)•b sal(2)mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()b ent(1)mutex

    espH

    huecos 7→ 1entrar()

    mutexespH

    huecos 7→ 0entrar()

    mutexespH

    huecos 7→ 0

    mutexespH

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 8 / 10

  • modelo de ejecuciónojo al trasiego entre colas

    ParkingMon

    entrar() salir()

    b ent(1)

    b ent(2)

    b sal(1)

    b sal(2)

    huecos 7→ 1

    mutexmutexespH

    entrar()

    entrar()

    entrar()

    entrar()b ent(2)mutex

    entrar() huecos 7→ 0

    entrar()b ent(2)mutex

    huecos 7→ 0

    entrar()mutex

    huecos 7→ 0

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(1)•b sal(2)mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b ent(2)•b sal(2)mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()b ent(1)mutex

    espH

    huecos 7→ 1entrar()

    mutexespH

    huecos 7→ 0entrar()

    mutexespH

    huecos 7→ 0

    mutexespH

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 8 / 10

  • modelo de ejecuciónojo al trasiego entre colas

    ParkingMon

    entrar() salir()

    b ent(1)

    b ent(2)

    b sal(1)

    b sal(2)

    huecos 7→ 1

    mutexmutexespH

    entrar()

    entrar()

    entrar()

    entrar()b ent(2)mutex

    entrar() huecos 7→ 0

    entrar()b ent(2)mutex

    huecos 7→ 0

    entrar()mutex

    huecos 7→ 0

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(1)•b sal(2)mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b ent(2)•b sal(2)mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()b ent(1)mutex

    espH

    huecos 7→ 1entrar()

    mutexespH

    huecos 7→ 0entrar()

    mutexespH

    huecos 7→ 0

    mutexespH

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 8 / 10

  • modelo de ejecuciónojo al trasiego entre colas

    ParkingMon

    entrar() salir()

    b ent(1)

    b ent(2)

    b sal(1)

    b sal(2)

    huecos 7→ 1

    mutexmutexespH

    entrar()

    entrar()

    entrar()

    entrar()b ent(2)mutex

    entrar() huecos 7→ 0

    entrar()b ent(2)mutex

    huecos 7→ 0

    entrar()mutex

    huecos 7→ 0

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(1)•b sal(2)mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b ent(2)•b sal(2)mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()b ent(1)mutex

    espH

    huecos 7→ 1entrar()

    mutexespH

    huecos 7→ 0entrar()

    mutexespH

    huecos 7→ 0

    mutexespH

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 8 / 10

  • modelo de ejecuciónojo al trasiego entre colas

    ParkingMon

    entrar() salir()

    b ent(1)

    b ent(2)

    b sal(1)

    b sal(2)

    huecos 7→ 1

    mutexmutexespH

    entrar()

    entrar()

    entrar()

    entrar()b ent(2)mutex

    entrar() huecos 7→ 0

    entrar()b ent(2)mutex

    huecos 7→ 0

    entrar()mutex

    huecos 7→ 0

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(1)•b sal(2)mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b ent(2)•b sal(2)mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()b ent(1)mutex

    espH

    huecos 7→ 1entrar()

    mutexespH

    huecos 7→ 0entrar()

    mutexespH

    huecos 7→ 0

    mutexespH

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 8 / 10

  • modelo de ejecuciónojo al trasiego entre colas

    ParkingMon

    entrar() salir()

    b ent(1)

    b ent(2)

    b sal(1)

    b sal(2)

    huecos 7→ 1

    mutexmutexespH

    entrar()

    entrar()

    entrar()

    entrar()b ent(2)mutex

    entrar() huecos 7→ 0

    entrar()b ent(2)mutex

    huecos 7→ 0

    entrar()mutex

    huecos 7→ 0

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(1)•b sal(2)mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b ent(2)•b sal(2)mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()b ent(1)mutex

    espH

    huecos 7→ 1entrar()

    mutexespH

    huecos 7→ 0entrar()

    mutexespH

    huecos 7→ 0

    mutexespH

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 8 / 10

  • modelo de ejecuciónojo al trasiego entre colas

    ParkingMon

    entrar() salir()

    b ent(1)

    b ent(2)

    b sal(1)

    b sal(2)

    huecos 7→ 1

    mutexmutexespH

    entrar()

    entrar()

    entrar()

    entrar()b ent(2)mutex

    entrar() huecos 7→ 0

    entrar()b ent(2)mutex

    huecos 7→ 0

    entrar()mutex

    huecos 7→ 0

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(1)•b sal(2)mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b ent(2)•b sal(2)mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()b ent(1)mutex

    espH

    huecos 7→ 1entrar()

    mutexespH

    huecos 7→ 0entrar()

    mutexespH

    huecos 7→ 0

    mutexespH

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 8 / 10

  • modelo de ejecuciónojo al trasiego entre colas

    ParkingMon

    entrar() salir()

    b ent(1)

    b ent(2)

    b sal(1)

    b sal(2)

    huecos 7→ 1

    mutexmutexespH

    entrar()

    entrar()

    entrar()

    entrar()b ent(2)mutex

    entrar() huecos 7→ 0

    entrar()b ent(2)mutex

    huecos 7→ 0

    entrar()mutex

    huecos 7→ 0

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(1)•b sal(2)mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b ent(2)•b sal(2)mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()b ent(1)mutex

    espH

    huecos 7→ 1entrar()

    mutexespH

    huecos 7→ 0entrar()

    mutexespH

    huecos 7→ 0

    mutexespH

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 8 / 10

  • modelo de ejecuciónojo al trasiego entre colas

    ParkingMon

    entrar() salir()

    b ent(1)

    b ent(2)

    b sal(1)

    b sal(2)

    huecos 7→ 1

    mutexmutexespH

    entrar()

    entrar()

    entrar()

    entrar()b ent(2)mutex

    entrar() huecos 7→ 0

    entrar()b ent(2)mutex

    huecos 7→ 0

    entrar()mutex

    huecos 7→ 0

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(1)•b sal(2)mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b ent(2)•b sal(2)mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()b ent(1)mutex

    espH

    huecos 7→ 1entrar()

    mutexespH

    huecos 7→ 0entrar()

    mutexespH

    huecos 7→ 0

    mutexespH

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 8 / 10

  • modelo de ejecuciónojo al trasiego entre colas

    ParkingMon

    entrar() salir()

    b ent(1)

    b ent(2)

    b sal(1)

    b sal(2)

    huecos 7→ 1

    mutexmutexespH

    entrar()

    entrar()

    entrar()

    entrar()b ent(2)mutex

    entrar() huecos 7→ 0

    entrar()b ent(2)mutex

    huecos 7→ 0

    entrar()mutex

    huecos 7→ 0

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(1)•b sal(2)mutex

    b ent(2)espH

    huecos 7→ 0entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b sal(2)mutex

    b ent(2)•b ent(1)espH

    huecos 7→ 1entrar()

    entrar()

    salir()

    salir()b ent(2)•b sal(2)mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    entrar() salir()b sal(2)mutexb ent(1)espH

    huecos 7→ 0entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()mutex

    b ent(1)espH

    huecos 7→ 1entrar()

    salir()b ent(1)mutex

    espH

    huecos 7→ 1entrar()

    mutexespH

    huecos 7→ 0entrar()

    mutexespH

    huecos 7→ 0

    mutexespH

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 8 / 10

  • lectores/escritores con monitoreslas condition queues permiten diferenciar CPREs

    LectoresEscritoresSyncil()

    fl()

    ie()

    fe()

    lector(1)

    lector(2)

    escritor(1)

    escritor(2)

    lectores 7→ 0escritores 7→ 1

    mutexmutexescritor(1)eL

    lector(1)•lector(2)eEil()il()

    ie()

    fe()

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 9 / 10

  • en próximos v́ıdeos. . .

    Estudiaremos un patrón general para traducir especificaciones de recurso compartido aclases de objetos sincronizados mediante monitores y condition queues.Habrá que tratar el caso de múltiples condition queues y cómo decidir qué llamadas asignal () hacer en caso de que se pueda desbloquear a varios tipos de procesos.También habrá que tratar el caso – no considerado en estos ejemplos sencillos – de CPREsque dependen de parámetros de entrada de una acción. Este problema es el tema delejercicio de las entregas E8 – E10.Explicaremos las diferencias entre nuestra implementación, la que viene con Java (locks &conditions) y otras propuestas.

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 10 / 10

  • en próximos v́ıdeos. . .

    Estudiaremos un patrón general para traducir especificaciones de recurso compartido aclases de objetos sincronizados mediante monitores y condition queues.Habrá que tratar el caso de múltiples condition queues y cómo decidir qué llamadas asignal () hacer en caso de que se pueda desbloquear a varios tipos de procesos.También habrá que tratar el caso – no considerado en estos ejemplos sencillos – de CPREsque dependen de parámetros de entrada de una acción. Este problema es el tema delejercicio de las entregas E8 – E10.Explicaremos las diferencias entre nuestra implementación, la que viene con Java (locks &conditions) y otras propuestas.

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 10 / 10

  • en próximos v́ıdeos. . .

    Estudiaremos un patrón general para traducir especificaciones de recurso compartido aclases de objetos sincronizados mediante monitores y condition queues.Habrá que tratar el caso de múltiples condition queues y cómo decidir qué llamadas asignal () hacer en caso de que se pueda desbloquear a varios tipos de procesos.También habrá que tratar el caso – no considerado en estos ejemplos sencillos – de CPREsque dependen de parámetros de entrada de una acción. Este problema es el tema delejercicio de las entregas E8 – E10.Explicaremos las diferencias entre nuestra implementación, la que viene con Java (locks &conditions) y otras propuestas.

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 10 / 10

  • en próximos v́ıdeos. . .

    Estudiaremos un patrón general para traducir especificaciones de recurso compartido aclases de objetos sincronizados mediante monitores y condition queues.Habrá que tratar el caso de múltiples condition queues y cómo decidir qué llamadas asignal () hacer en caso de que se pueda desbloquear a varios tipos de procesos.También habrá que tratar el caso – no considerado en estos ejemplos sencillos – de CPREsque dependen de parámetros de entrada de una acción. Este problema es el tema delejercicio de las entregas E8 – E10.Explicaremos las diferencias entre nuestra implementación, la que viene con Java (locks &conditions) y otras propuestas.

    Mariño (UPM) Sesión 17: Monitores I Concurrencia, abril 2020 10 / 10