semaforos

10
Ejemplos De Semaforos 08 De Septiembre del 2009

Upload: universidad-de-san-carlos-de-guatemala

Post on 18-Jun-2015

3.836 views

Category:

Documents


2 download

DESCRIPTION

Otros Problemas De Semaforos

TRANSCRIPT

Page 1: Semaforos

Ejemplos De Semaforos08 De Septiembre del 2009

Page 2: Semaforos

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

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

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

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

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

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

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

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

//{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);}