Semaforos

Post on 18-Jun-2015

3.836 views 2 download

description

Otros Problemas De Semaforos

Transcript of Semaforos

Ejemplos De Semaforos08 De Septiembre del 2009

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

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);

}

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]);}

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

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);

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}

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.

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);

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