semaforos
DESCRIPTION
Otros Problemas De SemaforosTRANSCRIPT
![Page 1: Semaforos](https://reader036.vdocumento.com/reader036/viewer/2022081508/55827e9ed8b42adf088b5252/html5/thumbnails/1.jpg)
Ejemplos De Semaforos08 De Septiembre del 2009
![Page 2: Semaforos](https://reader036.vdocumento.com/reader036/viewer/2022081508/55827e9ed8b42adf088b5252/html5/thumbnails/2.jpg)
Base De DatosFILOSOFOS COMENSALES
Enunciado Del Problema:• El número de cada proceso representa su ID y
además el numero de bloqueos que el proceso utiliza de la DB.
• Pueden haber varios procesos usando la DB pero la suma de los bloques utilizado no debe ser mayor a 100.
• Pueden haber varios procesos usando la DB pero la suma de los bloques utilizados no debe ser mayor a 100.
Proceso 1Proceso 2Proceso 3Proceso 4Proceso n
![Page 3: Semaforos](https://reader036.vdocumento.com/reader036/viewer/2022081508/55827e9ed8b42adf088b5252/html5/thumbnails/3.jpg)
Solucion Del Problema:Filosofos Comensales:Variables:
Status[1..N] = ‘P’ --- Hace_Cosas() ‘H’--- Quiere_usarBD() ‘C’--- Usa_BD()
Suma: Integer --- La suma de bloques utilizados.Semaforos:
Exc_Mut -- Recursos CompartidosSem[1..N] -- Semaforo X Proceso
Inicializacion:suma=0; Is(Exc_Mut,1);For i=1 to N{
status[i]=‘P’Is(Semaforo;0);
}
![Page 4: Semaforos](https://reader036.vdocumento.com/reader036/viewer/2022081508/55827e9ed8b42adf088b5252/html5/thumbnails/4.jpg)
Base De DatosFILOSOFOS COMENSALES
Proceso(Integer i){Repeat Hace_cosas(); Solicita_BD(i); Usa_BD(); Devuelve_BDD(); Hace_MasCosas();}
Solicita_BDD( Integer i){ Down(Exc_Mut); Status[i]=‘h’; test(i); up(Exc_Mut); Down(Exc_Mut);}
Devuelve_BDD(Integer i){ Down(Exc_Mut); status[i]=‘P’; suma=suma-i; for j=50 down to 1 test(i); up(Exc_mut);}Test(Integer i){If(suma+i<=100 and status[i]=‘h’) suma=suma+i; status[i]=‘c’; up(Sem[i]);}
![Page 5: Semaforos](https://reader036.vdocumento.com/reader036/viewer/2022081508/55827e9ed8b42adf088b5252/html5/thumbnails/5.jpg)
Fumadores
Enunciado Del Problema:• Cada fumador debe esperar que el agente coloque
sobre la mesa los ingredientes que les hace falta.• Si un fumador esta fumando, el agente debe esperar
hasta que el fumador termine.
Papel Tabaco Fosforo
Agente
FosforoPapelTabaco
Cant Infinita
Cant Infinita
![Page 6: Semaforos](https://reader036.vdocumento.com/reader036/viewer/2022081508/55827e9ed8b42adf088b5252/html5/thumbnails/6.jpg)
Solucion Del Problema:Variables y Semaforos:
Esperar_fumadoresFumar_tabacoFum_papelFum :Fosforo
Inicializacion:IS(Esperar_fumador,1);IS(Fumador_tabaco,0);IS(Fumador_papel,0);IS(Fumador_fosforos,0);
![Page 7: Semaforos](https://reader036.vdocumento.com/reader036/viewer/2022081508/55827e9ed8b42adf088b5252/html5/thumbnails/7.jpg)
Fumadores
Agente(){Repeat Hace_Cosas(); Tomar_Ingredientes(); Down(Esperar_fumador); if(Ingredientes==tabaco and papel){ up(fumador_fosforos); }else if(Ingredientes== tabaco and fosforos) {up(fumador_papel);} else{ Up(fumador_tabaco); } Hace_mas_cosas(); Until_fin;}Fum_Tabaco(){ Repeat Down(fumador_tabaco); Fumar(); Up(Esperar_fumador); Until_fin}
![Page 8: Semaforos](https://reader036.vdocumento.com/reader036/viewer/2022081508/55827e9ed8b42adf088b5252/html5/thumbnails/8.jpg)
Puente Como Carretera
Enunciado Del Problema:• Solo pueden pasar carros por un sentido.• No pueden haber mas de 10 carros al mismo tiempo.• Si hay mas de 10 carros da la vuelta.
![Page 9: Semaforos](https://reader036.vdocumento.com/reader036/viewer/2022081508/55827e9ed8b42adf088b5252/html5/thumbnails/9.jpg)
Solucion Del Problema:Lectores y EscritoresVariables:
NCDNCI
Semaforos:Exc_MutDExc_MutISema
Inicializacion:NCD=0;NCI=0;IS(EXC_MUTD,1);IS(EXC_MUTI,1);IS(SEM,1);
![Page 10: Semaforos](https://reader036.vdocumento.com/reader036/viewer/2022081508/55827e9ed8b42adf088b5252/html5/thumbnails/10.jpg)
//{El auto derecho es similar}Autos_Izq{
Repeat down(Exc_MutI);
if(NCI<10){NCI=NCI+1;if(NCI==1)
down(Sem);Up(excMut);
Pasar();Down(Exc_Mut);NCI=NC-1;if(NCI==0) then
up(Sem);UP(Exc_MutI);
}else up(Exc_mutI);}