ejercicios de especificación recursos...
TRANSCRIPT
Ejercicios de Especificacion Recursos Compartidos
Guillermo Roman
ConcurrenciaGRADO EN INGENIERIA INFORMATICA/ GRADO EN MATEMATICAS E INFORMATICA/
DOBLE GRADO EN ING. INFORMATICA Y ADE
Universidad Politecnica de Madrid
http://babel.upm.es/teaching/concurrencia
Abril 2020
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 1 / 17
Ejemplo: lectores/escritores
Con acceso explıcito a los elementos del tipo
C-TAD GestorLEOPERACIONESACCION IL, FL, IE, FE:
SEMANTICADOMINIO:TIPO: GestorLE = (l : N× e : N)INICIAL: self.l = 0 ∧ self.e = 0INVARIANTE: (self.l > 0⇒ self.e = 0) ∧ (self.e > 0⇒ self.e = 1 ∧ self.l = 0)CPRE: self.e = 0IL
POST: self.e = selfpre .e ∧ self.l = selfpre .l + 1CPRE: CiertoFL
POST: self = selfpre \ self.l = selfpre .l − 1CPRE: self.e = 0 ∧ self.l = 0IE
POST: self.l = 0 ∧ self.e = 1
CPRE: CiertoFE
POST: self.l = 0 ∧ self.e = 0Guillermo Roman (UPM) Especificacion Recursos Abril 2020 2 / 17
Ejemplo: lectores/escritores
Usando pattern-matching para acceder al tipoC-TAD GestorLEOPERACIONESACCION IL, FL, IE, FE:
SEMANTICADOMINIO:TIPO: GestorLE = (l : N× e : N)INICIAL: self = (0, 0)INVARIANTE: (self.l > 0⇒ self.e = 0) ∧ (self.e > 0⇒ self.e = 1 ∧ self.l = 0)CPRE: self.e = 0IL
POST: selfpre = (lec , esc) ∧ self = (lec + 1, esc)CPRE: CiertoFL
POST: selfpre = (lec , esc) ∧ self = (lec − 1, esc)CPRE: self.e = 0 ∧ self.l = 0IE
POST: self = (0, 1)
CPRE: CiertoFE
POST: self = (0, 0)Guillermo Roman (UPM) Especificacion Recursos Abril 2020 3 / 17
Ejercicio: Los nomadas que cantan
Se esta desarrollando una IA para competir en el campeonato del mundo del popular
juego de mesa Los nomadas que cantan. Los desarrolladores han ideado un recursocompartido para representar las materias primas que tiene el jugador, siendo estas
materias primas cereal, agua y madera.
Hay una operacion no bloqueante por cada materia prima para que el jugador coja esa
materia prima: cargarCereal, cargarAgua y cargarMadera. El jugador puede llevar a losumo una unidad de cada materia prima pero no puede llevar cereal y madera a la vez, si
carga una pierde la otra.
Por otro lado, hay dos operaciones que consumen materias primas: avanzar (consumecereal y agua) y reparar (consume agua y madera). Estas operaciones son bloqueanteshasta que se disponga de las materias primas necesarias.
Se pide: especificar el recurso compartido teniendo en cuenta que bastarıa un booleanopor cada materia prima para indicar que el jugador tiene dicha materia (porque la ha
cargado) o no tiene dicha materia (porque acaba de empezar el juego o la ha consumido
avanzando o reparando).
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 4 / 17
Ejercicio: Los nomadas que cantan
C-TADMateriasPrimasOPERACIONESACCION cargarCereal, cargarAgua, cargarMadera, avanzar, reparar:
SEMANTICADOMINIO:TIPO:MateriasPrimas =INICIAL:INVARIANTE:CPRE:cargarCereal
POST:CPRE:cargarAgua
POST:CPRE:cargarMadera
POST:CPRE:avanzar
POST:CPRE:reparar
POST:
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 5 / 17
Ejercicio: Los nomadas que cantan
C-TADMateriasPrimasOPERACIONESACCION cargarCereal, cargarAgua, cargarMadera, avanzar, reparar:
SEMANTICADOMINIO:TIPO:MateriasPrimas = (cereal : B× agua : B×madera : B)INICIAL:INVARIANTE:CPRE:cargarCereal
POST:CPRE:cargarAgua
POST:CPRE:cargarMadera
POST:CPRE:avanzar
POST:CPRE:reparar
POST:
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 5 / 17
Ejercicio: Los nomadas que cantan
C-TADMateriasPrimasOPERACIONESACCION cargarCereal, cargarAgua, cargarMadera, avanzar, reparar:
SEMANTICADOMINIO:TIPO:MateriasPrimas = (cereal : B× agua : B×madera : B)INICIAL: self = (Falso,Falso,Falso)INVARIANTE:CPRE:cargarCereal
POST:CPRE:cargarAgua
POST:CPRE:cargarMadera
POST:CPRE:avanzar
POST:CPRE:reparar
POST:
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 5 / 17
Ejercicio: Los nomadas que cantan
C-TADMateriasPrimasOPERACIONESACCION cargarCereal, cargarAgua, cargarMadera, avanzar, reparar:
SEMANTICADOMINIO:TIPO:MateriasPrimas = (cereal : B× agua : B×madera : B)INICIAL: self = (Falso,Falso,Falso)INVARIANTE:CPRE: CiertocargarCereal
POST:CPRE: CiertocargarAgua
POST:CPRE: CiertocargarMadera
POST:CPRE:avanzar
POST:CPRE:reparar
POST:
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 5 / 17
Ejercicio: Los nomadas que cantan
C-TADMateriasPrimasOPERACIONESACCION cargarCereal, cargarAgua, cargarMadera, avanzar, reparar:
SEMANTICADOMINIO:TIPO:MateriasPrimas = (cereal : B× agua : B×madera : B)INICIAL: self = (Falso,Falso,Falso)INVARIANTE:CPRE: CiertocargarCereal
POST:CPRE: CiertocargarAgua
POST:CPRE: CiertocargarMadera
POST:CPRE: self.cereal ∧ self.aguaavanzar
POST:CPRE: self.madera ∧ self.aguareparar
POST:
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 5 / 17
Ejercicio: Los nomadas que cantan
C-TADMateriasPrimasOPERACIONESACCION cargarCereal, cargarAgua, cargarMadera, avanzar, reparar:
SEMANTICADOMINIO:TIPO:MateriasPrimas = (cereal : B× agua : B×madera : B)INICIAL: self = (Falso,Falso,Falso)INVARIANTE:CPRE: CiertocargarCereal
POST: self = (Cierto, selfpre .agua ,Falso)CPRE: CiertocargarAgua
POST:CPRE: CiertocargarMadera
POST:CPRE: self.cereal ∧ self.aguaavanzar
POST:CPRE: self.madera ∧ self.aguareparar
POST:
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 5 / 17
Ejercicio: Los nomadas que cantan
C-TADMateriasPrimasOPERACIONESACCION cargarCereal, cargarAgua, cargarMadera, avanzar, reparar:
SEMANTICADOMINIO:TIPO:MateriasPrimas = (cereal : B× agua : B×madera : B)INICIAL: self = (Falso,Falso,Falso)INVARIANTE:CPRE: CiertocargarCereal
POST: self = (Cierto, selfpre .agua ,Falso)CPRE: CiertocargarAgua
POST: self = (selfpre .cereal ,Cierto, selfpre .madera)CPRE: CiertocargarMadera
POST:CPRE: self.cereal ∧ self.aguaavanzar
POST:CPRE: self.madera ∧ self.aguareparar
POST:
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 5 / 17
Ejercicio: Los nomadas que cantan
C-TADMateriasPrimasOPERACIONESACCION cargarCereal, cargarAgua, cargarMadera, avanzar, reparar:
SEMANTICADOMINIO:TIPO:MateriasPrimas = (cereal : B× agua : B×madera : B)INICIAL: self = (Falso,Falso,Falso)INVARIANTE:CPRE: CiertocargarCereal
POST: self = (Cierto, selfpre .agua ,Falso)CPRE: CiertocargarAgua
POST: self = (selfpre .cereal ,Cierto, selfpre .madera)CPRE: CiertocargarMadera
POST: self = (Falso, selfpre .agua ,Cierto)CPRE: self.cereal ∧ self.aguaavanzar
POST:CPRE: self.madera ∧ self.aguareparar
POST:
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 5 / 17
Ejercicio: Los nomadas que cantan
C-TADMateriasPrimasOPERACIONESACCION cargarCereal, cargarAgua, cargarMadera, avanzar, reparar:
SEMANTICADOMINIO:TIPO:MateriasPrimas = (cereal : B× agua : B×madera : B)INICIAL: self = (Falso,Falso,Falso)INVARIANTE: ¬self.cereal ∨ ¬self.maderaCPRE: CiertocargarCereal
POST: self = (Cierto, selfpre .agua ,Falso)CPRE: CiertocargarAgua
POST: self = (selfpre .cereal ,Cierto, selfpre .madera)CPRE: CiertocargarMadera
POST: self = (Falso, selfpre .agua ,Cierto)CPRE: self.cereal ∧ self.aguaavanzar
POST: self = (Falso,Falso, selfpre .madera)CPRE: self.madera ∧ self.aguareparar
POST:
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 5 / 17
Ejercicio: Los nomadas que cantan
C-TADMateriasPrimasOPERACIONESACCION cargarCereal, cargarAgua, cargarMadera, avanzar, reparar:
SEMANTICADOMINIO:TIPO:MateriasPrimas = (cereal : B× agua : B×madera : B)INICIAL: self = (Falso,Falso,Falso)INVARIANTE: ¬self.cereal ∨ ¬self.maderaCPRE: CiertocargarCereal
POST: self = (Cierto, selfpre .agua ,Falso)CPRE: CiertocargarAgua
POST: self = (selfpre .cereal ,Cierto, selfpre .madera)CPRE: CiertocargarMadera
POST: self = (Falso, selfpre .agua ,Cierto)CPRE: self.cereal ∧ self.aguaavanzar
POST: self = (Falso,Falso, selfpre .madera)CPRE: self.madera ∧ self.aguareparar
POST: self = (selfpre .cereal ,Falso,Falso)
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 5 / 17
Ejercicio: Dining Philisophers
Lo que veis a continuacion es la descripcion original de Edsger W. Dijkstra del problema de los
Dining Philosophers:La vida de un filosofo consiste en alternar pensar y comer en una especie de
bucle infinito. N filosofos, numerados del 0 al N−1, viven en una casa con una mesaen la que cada filosofo tiene su sitio asignado:
Su unico problema, al margen de los filosoficos, es que su menu consiste en un tipocomplicado de espagueti que es necesario comer con dos tenedores. Hay un unicotenedor a cada lado de cada plato. Eso no es un problema. Sin embargo, comoconsecuencia, no puede haber dos filosofos comiendo a la vez uno al lado del otro.
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 6 / 17
Ejercicio: Dining Philisophers
Hemos decidido representar el problema en forma de un recurso compartidoMesa con:dos operaciones: mesa .cogerTenedores(i ) ymesa .soltarTenedores(i )Esas seran las operaciones que el filosofo i ejecutara antes y despues de comer:
I de forma que tendra que bloquear enmesa .cogerTenedores(i ) cuando alguno de lostenedores a los lados de su plato esten siendo usados (por el filosofo (i + 1) mod N o por elfilosofo (i − 1) mod N )
La operacionmesa .soltarTenedores(i ) no es bloqueanteNOTA: se sugiere que el dominio del recurso incluya una funcion parcial que hable de los
tenedores libres. Las funciones parciales formalizan las tablas
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 7 / 17
Ejercicio: Dining Philisophers
C-TADMesaOPERACIONESACCION cogerTenedores: N[e]ACCION soltarTenedores: N[e]SEMANTICADOMINIO:TIPO:Mesa =TIPO: TipoFilosofo = {0, ..,N − 1}INVARIANTE:
INICIAL:
CPRE:cogerTenedores(i)POST:
CPRE:soltarTenedores(i)POST:
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 8 / 17
Ejercicio: Dining Philisophers
C-TADMesaOPERACIONESACCION cogerTenedores: N[e]ACCION soltarTenedores: N[e]SEMANTICADOMINIO:TIPO:Mesa = tenedores : TipoFilosofo 7→ BTIPO: TipoFilosofo = {0, ..,N − 1}INVARIANTE:
INICIAL:
CPRE:cogerTenedores(i)POST:
CPRE:soltarTenedores(i)POST:
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 8 / 17
Ejercicio: Dining Philisophers
C-TADMesaOPERACIONESACCION cogerTenedores: N[e]ACCION soltarTenedores: N[e]SEMANTICADOMINIO:TIPO:Mesa = tenedores : TipoFilosofo 7→ BTIPO: TipoFilosofo = {0, ..,N − 1}INVARIANTE:
INICIAL: ∀ i ∈ TipoFilosofo • ¬self.tenedores(i )CPRE:cogerTenedores(i)POST:
CPRE:soltarTenedores(i)POST:
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 8 / 17
Ejercicio: Dining Philisophers
C-TADMesaOPERACIONESACCION cogerTenedores: N[e]ACCION soltarTenedores: N[e]SEMANTICADOMINIO:TIPO:Mesa = tenedores : TipoFilosofo 7→ BTIPO: TipoFilosofo = {0, ..,N − 1}INVARIANTE:
INICIAL: ∀ i ∈ TipoFilosofo • ¬self.tenedores(i )CPRE: ¬self.tenedores(i ) ∧ ¬self.tenedores(i +N 1)cogerTenedores(i)POST:
CPRE:soltarTenedores(i)POST:
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 8 / 17
Ejercicio: Dining Philisophers
C-TADMesaOPERACIONESACCION cogerTenedores: N[e]ACCION soltarTenedores: N[e]SEMANTICADOMINIO:TIPO:Mesa = tenedores : TipoFilosofo 7→ BTIPO: TipoFilosofo = {0, ..,N − 1}INVARIANTE:
INICIAL: ∀ i ∈ TipoFilosofo • ¬self.tenedores(i )CPRE: ¬self.tenedores(i ) ∧ ¬self.tenedores(i +N 1)cogerTenedores(i)POST:
CPRE: CiertosoltarTenedores(i)POST:
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 8 / 17
Ejercicio: Dining Philisophers
C-TADMesaOPERACIONESACCION cogerTenedores: N[e]ACCION soltarTenedores: N[e]SEMANTICADOMINIO:TIPO:Mesa = tenedores : TipoFilosofo 7→ BTIPO: TipoFilosofo = {0, ..,N − 1}INVARIANTE:
INICIAL: ∀ i ∈ TipoFilosofo • ¬self.tenedores(i )CPRE: ¬self.tenedores(i ) ∧ ¬self.tenedores(i +N 1)cogerTenedores(i)POST: self.tenedores = selfpre .tenedores ⊕ {i 7→ Cierto, i +N 1 7→ Cierto}
CPRE: CiertosoltarTenedores(i)POST:
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 8 / 17
Ejercicio: Dining Philisophers
C-TADMesaOPERACIONESACCION cogerTenedores: N[e]ACCION soltarTenedores: N[e]SEMANTICADOMINIO:TIPO:Mesa = tenedores : TipoFilosofo 7→ BTIPO: TipoFilosofo = {0, ..,N − 1}INVARIANTE:
INICIAL: ∀ i ∈ TipoFilosofo • ¬self.tenedores(i )CPRE: ¬self.tenedores(i ) ∧ ¬self.tenedores(i +N 1)cogerTenedores(i)POST: self.tenedores = selfpre .tenedores ⊕ {i 7→ Cierto, i +N 1 7→ Cierto}
CPRE: CiertosoltarTenedores(i)POST: self.tenedores = selfpre .tenedores ⊕ {i 7→ Falso, i +N 1 7→ Falso}
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 8 / 17
Ejercicio: Dining Philisophers
C-TADMesaOPERACIONESACCION cogerTenedores: N[e]ACCION soltarTenedores: N[e]SEMANTICADOMINIO:TIPO:Mesa = tenedores : TipoFilosofo 7→ BTIPO: TipoFilosofo = {0, ..,N − 1}INVARIANTE: | {i ∈ TipoFilosofo • self .tenedores(i )} | mod2 = 0INICIAL: ∀ i ∈ TipoFilosofo • ¬self.tenedores(i )CPRE: ¬self.tenedores(i ) ∧ ¬self.tenedores(i +N 1)cogerTenedores(i)POST: self.tenedores = selfpre .tenedores ⊕ {i 7→ Cierto, i +N 1 7→ Cierto}
CPRE: CiertosoltarTenedores(i)POST: self.tenedores = selfpre .tenedores ⊕ {i 7→ Falso, i +N 1 7→ Falso}
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 8 / 17
Ejercicio: Dining Philisophers
C-TADMesaOPERACIONESACCION cogerTenedores: N[e]ACCION soltarTenedores: N[e]SEMANTICADOMINIO:TIPO:Mesa = TipoFilosofo 7→ BTIPO: TipoFilosofo = {0, ..,N − 1}INVARIANTE: | {i ∈ TipoFilosofo • self (i )} | mod2 = 0INICIAL: ∀ i ∈ TipoFilosofo • ¬self(i )CPRE: ¬self(i ) ∧ ¬self(i +N 1)cogerTenedores(i)POST: self = selfpre ⊕ {i 7→ Cierto, i +N 1 7→ Cierto}
CPRE: CiertosoltarTenedores(i)POST: self = selfpre ⊕ {i 7→ Falso, i +N 1 7→ Falso}
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 9 / 17
Ejercicios: Examen 18/19 Mayo
Dado el siguiente CTAD:
C-TADMiCTADTIPO:MiCTAD = Indice → BTIPO: Indice = {0, 1}INICIAL: ∀ i ∈ Indice • ¬self(i )INVARIANTE: ¬self(0) ∨ self(1)CPRE: ¬self(0) ∧ ¬self(1)uno()
POST: self = selfpre ⊕ {1 7→ Cierto}CPRE: ¬self(0) ∧ self(1)dos()
POST: self = selfpre ⊕ {0 7→ Cierto}CPRE: self(1)tres()
POST: self = selfpre ⊕ {0 7→ Falso} ⊕ {1 7→ Falso}
Asumiendo que tenemos tres procesos que invocan repetidamente las operaciones uno(),dos() y tres() del recurso compartido. Se pide marcar la afirmacion correcta:(a) El sistema podrıa quedarse bloqueado
(b) El sistema nunca quedara bloqueado y siempre se cumplira la invariante
(c) Podrıa llegar a violarse la invariante
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 10 / 17
Ejercicios: Examen 18/19 Mayo
C-TADMiCTADTIPO:MiCTAD = Indice → BTIPO: Indice = {0, 1}INICIAL: ∀ i ∈ Indice • ¬self(i )INVARIANTE:¬self(0) ∨ self(1)
CPRE: ¬self(0) ∧ ¬self(1)uno()
POST: self = selfpre ⊕ {1 7→ Cierto}CPRE: ¬self(0) ∧ self(1)dos()
POST: self = selfpre ⊕ {0 7→ Cierto}CPRE: self(1)tres()
POST: self = selfpre ⊕ {0 7→ Falso} ⊕ {1 7→ Falso}
(F,F)
(T,T)
(T,F)
(F,T)
(a) El sistema podrıa quedarse bloqueado
(b) El sistema nunca quedara bloqueado y siempre se cumplira la invariante
(c) Podrıa llegar a violarse la invariante
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 11 / 17
Ejercicios: Examen 18/19 Mayo
C-TADMiCTADTIPO:MiCTAD = Indice → BTIPO: Indice = {0, 1}INICIAL: ∀ i ∈ Indice • ¬self(i )INVARIANTE:¬self(0) ∨ self(1)
CPRE: ¬self(0) ∧ ¬self(1)uno()
POST: self = selfpre ⊕ {1 7→ Cierto}CPRE: ¬self(0) ∧ self(1)dos()
POST: self = selfpre ⊕ {0 7→ Cierto}CPRE: self(1)tres()
POST: self = selfpre ⊕ {0 7→ Falso} ⊕ {1 7→ Falso}
(F,F)
(T,T)
(T,F)
(F,T)
uno
(a) El sistema podrıa quedarse bloqueado
(b) El sistema nunca quedara bloqueado y siempre se cumplira la invariante
(c) Podrıa llegar a violarse la invariante
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 11 / 17
Ejercicios: Examen 18/19 Mayo
C-TADMiCTADTIPO:MiCTAD = Indice → BTIPO: Indice = {0, 1}INICIAL: ∀ i ∈ Indice • ¬self(i )INVARIANTE:¬self(0) ∨ self(1)
CPRE: ¬self(0) ∧ ¬self(1)uno()
POST: self = selfpre ⊕ {1 7→ Cierto}CPRE: ¬self(0) ∧ self(1)dos()
POST: self = selfpre ⊕ {0 7→ Cierto}CPRE: self(1)tres()
POST: self = selfpre ⊕ {0 7→ Falso} ⊕ {1 7→ Falso}
(F,F)
(T,T)
(T,F)
(F,T)
uno
dos
(a) El sistema podrıa quedarse bloqueado
(b) El sistema nunca quedara bloqueado y siempre se cumplira la invariante
(c) Podrıa llegar a violarse la invariante
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 11 / 17
Ejercicios: Examen 18/19 Mayo
C-TADMiCTADTIPO:MiCTAD = Indice → BTIPO: Indice = {0, 1}INICIAL: ∀ i ∈ Indice • ¬self(i )INVARIANTE:¬self(0) ∨ self(1)
CPRE: ¬self(0) ∧ ¬self(1)uno()
POST: self = selfpre ⊕ {1 7→ Cierto}CPRE: ¬self(0) ∧ self(1)dos()
POST: self = selfpre ⊕ {0 7→ Cierto}CPRE: self(1)tres()
POST: self = selfpre ⊕ {0 7→ Falso} ⊕ {1 7→ Falso}
(F,F)
(T,T)
(T,F)
(F,T)
uno
dos
tres
(a) El sistema podrıa quedarse bloqueado
(b) El sistema nunca quedara bloqueado y siempre se cumplira la invariante
(c) Podrıa llegar a violarse la invariante
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 11 / 17
Ejercicios: Examen 18/19 Mayo
C-TADMiCTADTIPO:MiCTAD = Indice → BTIPO: Indice = {0, 1}INICIAL: ∀ i ∈ Indice • ¬self(i )INVARIANTE:¬self(0) ∨ self(1)
CPRE: ¬self(0) ∧ ¬self(1)uno()
POST: self = selfpre ⊕ {1 7→ Cierto}CPRE: ¬self(0) ∧ self(1)dos()
POST: self = selfpre ⊕ {0 7→ Cierto}CPRE: self(1)tres()
POST: self = selfpre ⊕ {0 7→ Falso} ⊕ {1 7→ Falso}
(F,F)
(T,T)
(T,F)
(F,T)
uno
dos
tres tres
(a) El sistema podrıa quedarse bloqueado
(b) El sistema nunca quedara bloqueado y siempre se cumplira la invariante
(c) Podrıa llegar a violarse la invariante
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 11 / 17
Ejercicios: Examen 18/19 Mayo
Dado el siguiente programa
c l a s s Hi los {s t a t i c c l a s s MiHilo extends Thread {i n t n ;publ i c void run ( ) {for ( i n t i =0; i<100; i ++) {n ++;
}}}
publ i c void main ( S t r i ng [ ] args ) {Thread t = new MiHilo ( ) ;
t . s t a r t ( ) ;
t . run ( ) ;
hacerAlgo ( ) ; / / hace algo . . .t r y { t . j o i n ( ) ;}catch ( InterruptedExcept ion e ){}System . out . p r i n t l n ( t . n ) ;
}
¿Cual sera la salida por consola al ejecutar el main? Se pidemarcar la afirmacion correcta.
(a) 200
(b) No se puede saber porque podrıa haber condiciones de carrera.
(c) 100
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 12 / 17
Ejercicios: Examen 18/19 Mayo
Dado el siguiente programa
c l a s s Hi los {s t a t i c c l a s s MiHilo extends Thread {i n t n ;publ i c void run ( ) {for ( i n t i =0; i<100; i ++) {n ++;
}}}
publ i c void main ( S t r i ng [ ] args ) {Thread t = new MiHilo ( ) ;
t . s t a r t ( ) ;
t . run ( ) ;
hacerAlgo ( ) ; / / hace algo . . .t r y { t . j o i n ( ) ;}catch ( InterruptedExcept ion e ){}System . out . p r i n t l n ( t . n ) ;
}
¿Cual sera la salida por consola al ejecutar el main? Se pidemarcar la afirmacion correcta.
(a) El numero maximo de procesos ejecutando a la vez sera 2 y el metodo main podraterminar antes que el thread t
(b) El numero maximo de procesos ejecutando a la vez sera 3 y el metodo main terminarasiempre despues que el thread t
(c) El numero maximo de procesos ejecutando a la vez sera 2 y el metodo main terminarasiempre despues que el thread t
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 13 / 17
Ejercicios: Examen 18/19 Mayo
Dado un programa concurrente en la que tres threads instancias de las clases A, B y Ccomparten una variable n:
s t a t i c v o l a t i l e i n t n = 0 ;s t a t i c Semaphore s1 = new Semaphore ( 1 ) ;s t a t i c Semaphore s2 = new Semaphore ( 0 ) ;
c l a s s A extends Thread {publ i c void run ( ) {s2 . await ( ) ;
n = 2 ∗ n ;s1 . s i gna l ( ) ;
}}
c l a s s B extends Thread {publ i c void run ( ) {s1 . await ( ) ;
n = n ∗ n ;s2 . s i gna l ( ) ;
}}
c l a s s C extends Thread {publ i c void run ( ) {s1 . await ( ) ;
n = n + 2 ;
s2 . s i gna l ( ) ;
}}
¿Cual es el valor de n tras terminar los tres threads?
(a) 4
(b) 4 o 16
(c) 2 o 16
Si en el codigo anterior los semaforos s1 y s2 se inicializan a 1.
(a) No esta garantizada la exclusion mutua en el acceso a n(b) No esta garantizada la terminacion de las tres tareas
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 14 / 17
Ejercicios: Examen 18/19 Mayo
Dada la siguiente implementacion de una solucion al problema de la exclusion mutua con
espera activa :s t a t i c v o l a t i l e boolean i nc qu iere = f a l s e ;s t a t i c v o l a t i l e boolean dec quiere = f a l s e ;s t a t i c v o l a t i l e i n t cont = 0 ;
c l a s s Incrementador extends Thread {publ i c void run ( ) {for ( i n t i = 0 ; i < N OPS ; i ++) {i nc qu iere = true ;while ( dec quiere ) {}cont ++; / / SCi nc qu iere = f a l s e ;
}}}
c l a s s Decrementador extends Thread {publ i c void run ( ) {for ( i n t i = 0 ; i < N OPS ; i ++) {dec quiere = true ;while ( i nc qu iere ) {}cont−−; / / SCdec quiere = f a l s e ;
}}}
Suponiendo que tenemos un proceso de tipo Incrementador y otro proceso Decrementador,se pidemarcar la afirmacion correcta.(a) El programa no garantiza la exclusion mutua en el acceso a la seccion crıtica (cont++ y
cont--)(b) El programa no garantiza la propiedad de ausencia de interbloqueo
(c) El programa no garantiza la ausencia de esperas innecesarias
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 15 / 17
Ejercicio: Secuencias ordenadas de enteros
El recurso compartido OrdMezclamezcla dos secuencias ordenadas de numeros enteros paraformar una unica secuencia ordenada.
En este recurso interactuan tres procesos: dos productores que van pasando numeros de
sus secuencias de uno en uno y un consumidor que va extrayendo los numeros en orden
El recurso sera capaz de almacenar, como mucho, un dato de la secuencia que
llamaremos “izquierda” y un dato de la secuencia “derecha”
Cuando hay datos de ambas secuencias la operacion extraerMenor tomara el menor deambos y permitira que se anada un nuevo dato de la secuencia correspondiente
La operacion insertarIzda(d) inserta el dato d como parte de la secuencia izquierda ybloquea hasta que el hueco para el dato izquierdo esta disponible
La operacion insertarDcha es analoga por lo que no es necesario implementarla
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 16 / 17
Ejercicio: Secuencias Ordenadas de enteros
C-TAD OrdMezclaOPERACIONESACCION insertarIzda: Z[e]ACCION insertarDcha: Z[e]ACCION extraerMenor: Z[s]
SEMANTICADOMINIO:TIPO: OrdMezcla = 〈hayDato : Lado → B× dato : Lado → Z〉TIPO: Lado = Izda | DchaINICIAL: ∀ i ∈ Lado • ¬self .hayDato(i )CPRE: ¬self.hayDato(Izda)insertarIzda(d)
POST: self.hayDato = selfpre .hayDato ⊕ {Izda 7→ Cierto} ∧self.dato = selfpre .dato ⊕ {Izda 7→ d}
CPRE: self .hayDato(Izda) ∧ self .hayDato(Dcha)extraerMenor(min)
POST: (selfpre .dato(Izda) ≤ selfpre .dato(Dcha) ∧self.hayDato = selfpre .hayDato ⊕{Izda 7→ Falso} ∧ min = self pre .dato(Izda)) ∨(selfpre .dato(Dcha) ≤ selfpre .dato(Izda) ∧self.hayDato = selfpre .hayDato ⊕ {Dcha 7→ Falso} ∧ min = self pre .dato(Dcha))
Guillermo Roman (UPM) Especificacion Recursos Abril 2020 17 / 17