Sesión 17: Monitores Introducciónbabel.ls.fi.upm.es/teaching/concurrencia/material/... ·...
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