Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Ejemplos De Semaforos 08  De Septiembre del 2009
Base De Datos FILOSOFOS COMENSALES <ul><li>Enunciado Del Problema: </li></ul><ul><li>El número de cada proceso representa ...
Solucion Del Problema: <ul><li>Filosofos Comensales: </li></ul><ul><li>Variables: </li></ul><ul><ul><li>Status[1..N] = ‘P’...
Base De Datos FILOSOFOS COMENSALES Proceso(Integer i){ Repeat Hace_cosas(); Solicita_BD(i); Usa_BD(); Devuelve_BDD(); Hace...
Fumadores <ul><li>Enunciado Del Problema: </li></ul><ul><li>Cada fumador debe esperar que el agente coloque sobre la mesa ...
Solucion Del Problema: <ul><li>Variables y Semaforos: </li></ul><ul><ul><li>Esperar_fumadores </li></ul></ul><ul><ul><li>F...
Fumadores Agente(){ Repeat Hace_Cosas(); Tomar_Ingredientes(); Down(Esperar_fumador); if(Ingredientes==tabaco and papel){ ...
Puente Como Carretera <ul><li>Enunciado Del Problema: </li></ul><ul><li>Solo pueden pasar carros por un sentido. </li></ul...
Solucion Del Problema: <ul><li>Lectores y Escritores </li></ul><ul><li>Variables: </li></ul><ul><li>NCD </li></ul><ul><li>...
<ul><li>//{El auto derecho es similar} </li></ul><ul><li>Autos_Izq{ </li></ul><ul><li>Repeat </li></ul><ul><li>  down(Exc_...
Upcoming SlideShare
Loading in …5
×

Semaforos

4,365 views

Published on

Otros Problemas De Semaforos

Semaforos

  1. 1. Ejemplos De Semaforos 08 De Septiembre del 2009
  2. 2. Base De Datos FILOSOFOS COMENSALES <ul><li>Enunciado Del Problema: </li></ul><ul><li>El número de cada proceso representa su ID y además el numero de bloqueos que el proceso utiliza de la DB. </li></ul><ul><li>Pueden haber varios procesos usando la DB pero la suma de los bloques utilizado no debe ser mayor a 100. </li></ul><ul><li>Pueden haber varios procesos usando la DB pero la suma de los bloques utilizados no debe ser mayor a 100. </li></ul>Proceso 1 Proceso 2 Proceso 3 Proceso 4 Proceso n
  3. 3. Solucion Del Problema: <ul><li>Filosofos Comensales: </li></ul><ul><li>Variables: </li></ul><ul><ul><li>Status[1..N] = ‘P’  --- Hace_Cosas() </li></ul></ul><ul><ul><li>‘ H’  --- Quiere_usarBD() </li></ul></ul><ul><ul><li>‘ C’  --- Usa_BD() </li></ul></ul><ul><li>Suma: Integer  --- La suma de bloques utilizados. </li></ul><ul><li>Semaforos: </li></ul><ul><ul><li>Exc_Mut  -- Recursos Compartidos </li></ul></ul><ul><ul><li>Sem[1..N]  -- Semaforo X Proceso </li></ul></ul><ul><li>Inicializacion: </li></ul><ul><li>suma=0; Is(Exc_Mut,1); </li></ul><ul><li>For i=1 to N{ </li></ul><ul><li>status[i]=‘P’ </li></ul><ul><li>Is(Semaforo;0); </li></ul><ul><li>} </li></ul>
  4. 4. Base De Datos FILOSOFOS 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]); }
  5. 5. Fumadores <ul><li>Enunciado Del Problema: </li></ul><ul><li>Cada fumador debe esperar que el agente coloque sobre la mesa los ingredientes que les hace falta. </li></ul><ul><li>Si un fumador esta fumando, el agente debe esperar hasta que el fumador termine. </li></ul>Fosforo Papel Tabaco Cant Infinita Cant Infinita
  6. 6. Solucion Del Problema: <ul><li>Variables y Semaforos: </li></ul><ul><ul><li>Esperar_fumadores </li></ul></ul><ul><ul><li>Fumar_tabaco </li></ul></ul><ul><ul><li>Fum_papel </li></ul></ul><ul><ul><li>Fum :Fosforo </li></ul></ul><ul><li>Inicializacion: </li></ul><ul><li>IS(Esperar_fumador,1); </li></ul><ul><li>IS(Fumador_tabaco,0); </li></ul><ul><li>IS(Fumador_papel,0); </li></ul><ul><li>IS(Fumador_fosforos,0); </li></ul>
  7. 7. 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 }
  8. 8. Puente Como Carretera <ul><li>Enunciado Del Problema: </li></ul><ul><li>Solo pueden pasar carros por un sentido. </li></ul><ul><li>No pueden haber mas de 10 carros al mismo tiempo. </li></ul><ul><li>Si hay mas de 10 carros da la vuelta. </li></ul>
  9. 9. Solucion Del Problema: <ul><li>Lectores y Escritores </li></ul><ul><li>Variables: </li></ul><ul><li>NCD </li></ul><ul><li>NCI </li></ul><ul><li>Semaforos: </li></ul><ul><li>Exc_MutD </li></ul><ul><li>Exc_MutI </li></ul><ul><li>Sema </li></ul><ul><li>Inicializacion: </li></ul><ul><li>NCD=0; </li></ul><ul><li>NCI=0; </li></ul><ul><li>IS(EXC_MUTD,1); </li></ul><ul><li>IS(EXC_MUTI,1); </li></ul><ul><li>IS(SEM,1); </li></ul>
  10. 10. <ul><li>//{El auto derecho es similar} </li></ul><ul><li>Autos_Izq{ </li></ul><ul><li>Repeat </li></ul><ul><li> down(Exc_MutI); </li></ul><ul><li>if(NCI<10){ </li></ul><ul><li>NCI=NCI+1; </li></ul><ul><li>if(NCI==1) </li></ul><ul><li>down(Sem); </li></ul><ul><li>Up(excMut); </li></ul><ul><li>Pasar(); </li></ul><ul><li>Down(Exc_Mut); </li></ul><ul><li>NCI=NC-1; </li></ul><ul><li>if(NCI==0) then </li></ul><ul><li>up(Sem); </li></ul><ul><li>UP(Exc_MutI); </li></ul><ul><li>}else up(Exc_mutI); </li></ul><ul><li>} </li></ul>

×