Filosofos Comensales
program Filo01; (* Filosofos comensales - semáforosversión 1 *) const N = 5; var palillo : array [1..N] of semaphore; (* binario *) I : integer; process type filosofos(numero : integer); begin repeat writeln('Pensando el ',numero); sleep(random(5)); (* PENSANDO *) wait(palillo[numero]); wait(palillo[(numero mod N) + 1]); writeln('Comiendo el ',numero); sleep(random(5)); (* COMIENDO *) signal(palillo[numero]); signal(palillo[(numero mod N) + 1]);forever end; (* filosofos *) var procfil: array[1..N] of filosofos; begin for I := 1 to N do initial(palillo[I],1); cobegin for I := 1 to N do procfil[I](I); coend end.
1
- Pascal-FC for IBM PC compatibles - Compiler Version P5.2 G L Davies & A Burns, University of Bradford Compiling filo01 ... Compilation complete - Interpreter Version P5.3 Program filo01 ... execution begins ... PensandoPensando Pensando Pensando Comiendo Pensando Pensando Comiendo Comiendo Comiendo Pensando Pensando el el el el el el el el el el el el 1 5 2 3 1 4 1 2 4 1 2 1Pensando el 4Comiendo el 5 2 5 3 4 5 1 2 4 4 5 1 3 5 1 5 2 3
3
Comiendo el Comiendo el Pensando el Comiendo el 3 Pensando el Comiendo el Pensando el 1 Comiendo el Pensando el Comiendo el Pensando el Pensando el Comiendo el 3 Pensando elComiendo el Pensando el Pensando el Comiendo el Comiendo el Comiendo el Pensando el Pensando el Comiendo el Pensando el
4 2
2
Aunque esta solución garantiza que dos vecinos no pueden comer simultáneamente, hay que rechazarla porque existe la posibilidad de crear un bloqueo mutuo. Suponga que los cinco filósofos tienen hambre al mismo tiempo y cada uno coge el palillo que está a su izquierda;todos los elementos del arreglo palillo serán iguales a cero. Cuando cada filósofo trata de coger el palillo a su derecha, su ejecución se aplazará eternamente. A continuación se presentan varias posibles soluciones, con diferentes algoritmos y con diferentes elementos del lenguaje para la sincronización de procesos. Se aclara que cualquier solución satisfactoria para este problema debe eliminarla posibilidad de que uno de ellos muera de hambre. Una solución libre de bloqueos mutuos no la elimina necesariamente. Permitir que cuatro filósofos como máximo, se sienten a comer al mismo tiempo. 2
program Filo02; (* Filósofos comensales - semáforos versión 2 *) const N = 5; var palillo : array [1..N] of semaphore; (* binario *) sillaslibre : semaphore; (* general *) I : integer; process...
Regístrate para leer el documento completo.