Sesión 17: Monitores Introducciónbabel.ls.fi.upm.es/teaching/concurrencia/material/... ·...

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ónbabel.ls.fi.upm.es/teaching/concurrencia/material/... ·...

Sesion 17: Monitores – IntroduccionJulio Marinoabril 2020

Concurrencia 2019/2020Universidad Politecnica de MadridGrado en Ingenierıa InformaticaGrado en Matematicas e Informatica2ble. grado en Ing. Informatica y ADEhttp://babel.upm.es/teaching/concurrencia

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 1 / 10

introduccion/motivacionbuscando mecanismos de mas alto nivel

En los anos 70 se hicieron varias propuestas de mecanismos de sincronizacion que fueranmas alla de los semaforos y que encajasen mejor en las ideas de programacionestructurada que se iban imponiendo.Per Brinch-Hansen en 1973 y C.A.R. Hoare en 1974 hicieron propuestas que tenıan encomun el tratar de manera separada la exclusion mutua y la sincronizacion por condicion.El concepto de monitor influyo en el diseno de los mecanismos de sincronizacionoriginales de Java si bien la librerıa mas fiel a la propuesta original es la llamada Locks &Conditions.En este curso usaremos nuestra propia librerıa de monitores(es.upm.babel.cclib.Monitor), con pequenas – pero relevantes – diferencias con la queviene con Java.

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 2 / 10

introduccion/motivacionbuscando mecanismos de mas alto nivel

En los anos 70 se hicieron varias propuestas de mecanismos de sincronizacion que fueranmas alla de los semaforos y que encajasen mejor en las ideas de programacionestructurada que se iban imponiendo.Per Brinch-Hansen en 1973 y C.A.R. Hoare en 1974 hicieron propuestas que tenıan encomun el tratar de manera separada la exclusion mutua y la sincronizacion por condicion.El concepto de monitor influyo en el diseno de los mecanismos de sincronizacionoriginales de Java si bien la librerıa mas fiel a la propuesta original es la llamada Locks &Conditions.En este curso usaremos nuestra propia librerıa de monitores(es.upm.babel.cclib.Monitor), con pequenas – pero relevantes – diferencias con la queviene con Java.

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 2 / 10

introduccion/motivacionbuscando mecanismos de mas alto nivel

En los anos 70 se hicieron varias propuestas de mecanismos de sincronizacion que fueranmas alla de los semaforos y que encajasen mejor en las ideas de programacionestructurada que se iban imponiendo.Per Brinch-Hansen en 1973 y C.A.R. Hoare en 1974 hicieron propuestas que tenıan encomun el tratar de manera separada la exclusion mutua y la sincronizacion por condicion.El concepto de monitor influyo en el diseno de los mecanismos de sincronizacionoriginales de Java si bien la librerıa mas fiel a la propuesta original es la llamada Locks &Conditions.En este curso usaremos nuestra propia librerıa de monitores(es.upm.babel.cclib.Monitor), con pequenas – pero relevantes – diferencias con la queviene con Java.

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 2 / 10

introduccion/motivacionbuscando mecanismos de mas alto nivel

En los anos 70 se hicieron varias propuestas de mecanismos de sincronizacion que fueranmas alla de los semaforos y que encajasen mejor en las ideas de programacionestructurada que se iban imponiendo.Per Brinch-Hansen en 1973 y C.A.R. Hoare en 1974 hicieron propuestas que tenıan encomun el tratar de manera separada la exclusion mutua y la sincronizacion por condicion.El concepto de monitor influyo en el diseno de los mecanismos de sincronizacionoriginales de Java si bien la librerıa mas fiel a la propuesta original es la llamada Locks &Conditions.En este curso usaremos nuestra propia librerıa de monitores(es.upm.babel.cclib.Monitor), con pequenas – pero relevantes – diferencias con la queviene con Java.

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 2 / 10

monitoresno tan diferentes de los semaforos, pero separando usos

La idea fundamental de los monitores consiste en tener dos tipos de entidades. Por unlado, los monitores en sı son los responsables de garantizar la ejecucion en exclusionmutua de ciertos fragmentos de codigo. Por otra parte, las conditions o condition queuesson las encargadas de manejar la sincronizacion por condicion. En nuestra librerı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.Exclusion mutua: Los objetos de la clase Monitor proporcionan un metodo para solicitarpermiso de ejecucion en exclusion mutua (enter()) y otro metodo para liberar esepermiso (leave() ). Por ejemplo:mutex = new Monitor ( ) ;mutex . enter ( ) ;<seccion c r i t i c a>mutex . leave ( ) ;A simple vista, un monitor se parece mucho a un semaforo inicializado a uno como losque usabamos para el protocolo de exclusion mutua, pero los monitores solo tienen dosestados: libre y ocupado. Cuando se crea, el monitor esta 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 mas antiguo. No se puedehacer leave() sobre un monitor no adquirido previamente.

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 3 / 10

monitoresno tan diferentes de los semaforos, pero separando usos

La idea fundamental de los monitores consiste en tener dos tipos de entidades. Por unlado, los monitores en sı son los responsables de garantizar la ejecucion en exclusionmutua de ciertos fragmentos de codigo. Por otra parte, las conditions o condition queuesson las encargadas de manejar la sincronizacion por condicion. En nuestra librerı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.Exclusion mutua: Los objetos de la clase Monitor proporcionan un metodo para solicitarpermiso de ejecucion en exclusion mutua (enter()) y otro metodo para liberar esepermiso (leave() ). Por ejemplo:mutex = new Monitor ( ) ;mutex . enter ( ) ;<seccion c r i t i c a>mutex . leave ( ) ;A simple vista, un monitor se parece mucho a un semaforo inicializado a uno como losque usabamos para el protocolo de exclusion mutua, pero los monitores solo tienen dosestados: libre y ocupado. Cuando se crea, el monitor esta 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 mas antiguo. No se puedehacer leave() sobre un monitor no adquirido previamente.

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 3 / 10

monitoresno tan diferentes de los semaforos, pero separando usos

La idea fundamental de los monitores consiste en tener dos tipos de entidades. Por unlado, los monitores en sı son los responsables de garantizar la ejecucion en exclusionmutua de ciertos fragmentos de codigo. Por otra parte, las conditions o condition queuesson las encargadas de manejar la sincronizacion por condicion. En nuestra librerı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.Exclusion mutua: Los objetos de la clase Monitor proporcionan un metodo para solicitarpermiso de ejecucion en exclusion mutua (enter()) y otro metodo para liberar esepermiso (leave() ). Por ejemplo:mutex = new Monitor ( ) ;mutex . enter ( ) ;<seccion c r i t i c a>mutex . leave ( ) ;A simple vista, un monitor se parece mucho a un semaforo inicializado a uno como losque usabamos para el protocolo de exclusion mutua, pero los monitores solo tienen dosestados: libre y ocupado. Cuando se crea, el monitor esta 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 mas antiguo. No se puedehacer leave() sobre un monitor no adquirido previamente.

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 3 / 10

ejemplo: contador compartidosolo exclusion 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 ( ) ;}

}

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 4 / 10

modelo de ejecucionvisualizando la exclusion 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 5 / 10

modelo de ejecucionvisualizando la exclusion 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 5 / 10

modelo de ejecucionvisualizando la exclusion 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 5 / 10

modelo de ejecucionvisualizando la exclusion 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 5 / 10

modelo de ejecucionvisualizando la exclusion 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 5 / 10

modelo de ejecucionvisualizando la exclusion 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 5 / 10

modelo de ejecucionvisualizando la exclusion 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 5 / 10

modelo de ejecucionvisualizando la exclusion 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 5 / 10

modelo de ejecucionvisualizando la exclusion 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 5 / 10

monitores (cont.)tratamos ahora la sincronizacion por condicion

Sincronizacion por condicion: Con cada objeto de clase Monitor podemos asociar objetos(en numero variable) de la clase Monitor.Cond que son waitsets con polıtica FIFO. Estosobjetos son las condition queues.Las condition queues se construyen a partir de monitores usando el metodo newCond()de la clase Monitor. Esto garantiza la asociacion de cada cola con un unico monitor.El bloqueo de hilos se realiza llamando al metodo 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 cuestion, y el bloqueo conlleva la liberacion automatica de dicho monitor.¿Como se desbloquean los hilos en una condition queue? Otro thread que haya ganadoacceso exclusivo al monitor asociado puede ejecutar el metodo 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.

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 6 / 10

monitores (cont.)tratamos ahora la sincronizacion por condicion

Sincronizacion por condicion: Con cada objeto de clase Monitor podemos asociar objetos(en numero variable) de la clase Monitor.Cond que son waitsets con polıtica FIFO. Estosobjetos son las condition queues.Las condition queues se construyen a partir de monitores usando el metodo newCond()de la clase Monitor. Esto garantiza la asociacion de cada cola con un unico monitor.El bloqueo de hilos se realiza llamando al metodo 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 cuestion, y el bloqueo conlleva la liberacion automatica de dicho monitor.¿Como se desbloquean los hilos en una condition queue? Otro thread que haya ganadoacceso exclusivo al monitor asociado puede ejecutar el metodo 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.

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 6 / 10

monitores (cont.)tratamos ahora la sincronizacion por condicion

Sincronizacion por condicion: Con cada objeto de clase Monitor podemos asociar objetos(en numero variable) de la clase Monitor.Cond que son waitsets con polıtica FIFO. Estosobjetos son las condition queues.Las condition queues se construyen a partir de monitores usando el metodo newCond()de la clase Monitor. Esto garantiza la asociacion de cada cola con un unico monitor.El bloqueo de hilos se realiza llamando al metodo 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 cuestion, y el bloqueo conlleva la liberacion automatica de dicho monitor.¿Como se desbloquean los hilos en una condition queue? Otro thread que haya ganadoacceso exclusivo al monitor asociado puede ejecutar el metodo 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.

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 6 / 10

monitores (cont.)tratamos ahora la sincronizacion por condicion

Sincronizacion por condicion: Con cada objeto de clase Monitor podemos asociar objetos(en numero variable) de la clase Monitor.Cond que son waitsets con polıtica FIFO. Estosobjetos son las condition queues.Las condition queues se construyen a partir de monitores usando el metodo newCond()de la clase Monitor. Esto garantiza la asociacion de cada cola con un unico monitor.El bloqueo de hilos se realiza llamando al metodo 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 cuestion, y el bloqueo conlleva la liberacion automatica de dicho monitor.¿Como se desbloquean los hilos en una condition queue? Otro thread que haya ganadoacceso exclusivo al monitor asociado puede ejecutar el metodo 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.

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 6 / 10

ejemplo: aparcamientoanadimos sincronizacion por condicion 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 ( ) ;}

}

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 7 / 10

modelo de ejecucionojo 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 8 / 10

modelo de ejecucionojo 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 8 / 10

modelo de ejecucionojo 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 8 / 10

modelo de ejecucionojo 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 8 / 10

modelo de ejecucionojo 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 8 / 10

modelo de ejecucionojo 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 8 / 10

modelo de ejecucionojo 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 8 / 10

modelo de ejecucionojo 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 8 / 10

modelo de ejecucionojo 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 8 / 10

modelo de ejecucionojo 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 8 / 10

modelo de ejecucionojo 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 8 / 10

modelo de ejecucionojo 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 8 / 10

modelo de ejecucionojo 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 8 / 10

modelo de ejecucionojo 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 8 / 10

modelo de ejecucionojo 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 8 / 10

modelo de ejecucionojo 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 8 / 10

modelo de ejecucionojo 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 8 / 10

modelo de ejecucionojo 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 8 / 10

modelo de ejecucionojo 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

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 8 / 10

modelo de ejecucionojo 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

Marino (UPM) Sesion 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)eE

il()il()

ie()

fe()

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 9 / 10

en proximos vıdeos. . .

Estudiaremos un patron general para traducir especificaciones de recurso compartido aclases de objetos sincronizados mediante monitores y condition queues.Habra que tratar el caso de multiples condition queues y como decidir que llamadas asignal () hacer en caso de que se pueda desbloquear a varios tipos de procesos.Tambien habra que tratar el caso – no considerado en estos ejemplos sencillos – de CPREsque dependen de parametros de entrada de una accion. Este problema es el tema delejercicio de las entregas E8 – E10.Explicaremos las diferencias entre nuestra implementacion, la que viene con Java (locks &conditions) y otras propuestas.

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 10 / 10

en proximos vıdeos. . .

Estudiaremos un patron general para traducir especificaciones de recurso compartido aclases de objetos sincronizados mediante monitores y condition queues.Habra que tratar el caso de multiples condition queues y como decidir que llamadas asignal () hacer en caso de que se pueda desbloquear a varios tipos de procesos.Tambien habra que tratar el caso – no considerado en estos ejemplos sencillos – de CPREsque dependen de parametros de entrada de una accion. Este problema es el tema delejercicio de las entregas E8 – E10.Explicaremos las diferencias entre nuestra implementacion, la que viene con Java (locks &conditions) y otras propuestas.

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 10 / 10

en proximos vıdeos. . .

Estudiaremos un patron general para traducir especificaciones de recurso compartido aclases de objetos sincronizados mediante monitores y condition queues.Habra que tratar el caso de multiples condition queues y como decidir que llamadas asignal () hacer en caso de que se pueda desbloquear a varios tipos de procesos.Tambien habra que tratar el caso – no considerado en estos ejemplos sencillos – de CPREsque dependen de parametros de entrada de una accion. Este problema es el tema delejercicio de las entregas E8 – E10.Explicaremos las diferencias entre nuestra implementacion, la que viene con Java (locks &conditions) y otras propuestas.

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 10 / 10

en proximos vıdeos. . .

Estudiaremos un patron general para traducir especificaciones de recurso compartido aclases de objetos sincronizados mediante monitores y condition queues.Habra que tratar el caso de multiples condition queues y como decidir que llamadas asignal () hacer en caso de que se pueda desbloquear a varios tipos de procesos.Tambien habra que tratar el caso – no considerado en estos ejemplos sencillos – de CPREsque dependen de parametros de entrada de una accion. Este problema es el tema delejercicio de las entregas E8 – E10.Explicaremos las diferencias entre nuestra implementacion, la que viene con Java (locks &conditions) y otras propuestas.

Marino (UPM) Sesion 17: Monitores I Concurrencia, abril 2020 10 / 10