Algoritmo dos Filósofos em Pascal - Resolve parcialmente o problema
A figura abaixo mostra como essa situação ocorrera:
Agora veremos o algoritmo em Pascal de uma forma simplificada que representa essa situação:
PROGRAM Filosofo_1; /* Nome do programa. */ VAR Garfos : ARRAY [0..4] of Semaforo := 1; /* Cria um array de Garfos com quatro elementos, que só poderá receber o valor 1 ou 0, nesse caso e atribuído 1. */ I : INTEGE; /* Cria uma variável para servir como contador. */
PROCEDURE Filosofo (I : INTEGER); /* É o procedimento do filosofo correspondente a variável contadora. */
BEGIN /* Inicia o processo. */ REPEAT /* Repete em quanto for verdadeira. */ Pensando; /* Irá executar se o filosofo estiver pensando. */ DOWN (Garfos [I]); /* Decrementa 1 na possição I de Garfos. */ DOWN (Garfos [(I+1) MOD 5]); /* Aqui irá mandar o valor do resultado para o semáforo. */ Comendo; /* Irá executar se o filósofo estiver comendo. */ UP (Garfos[I]); /*Incrementa 1 na posição I de Garfos. */ UP (Garfos[(I+1) MOD 5]); /*Aqui irá mandar o valor do resultado para o semáforo. */ UNTIL False; /* Finaliza quando for falso. */
END; /* Finaliza o processo. */
BEGIN /* Inicia o programa. */ PARBEGIN /* Executa os comandos concorrentemente em uma ordem imprevisível. */ FOR I := 0 TO 4 DO /* Conta de 0 até 4 */ Filosofo (I); /* Acontece a chamada do procedimento do filósofo correspondente a variável contadora. */ PAREND; /* Só encerrara quando todos os processos tiverem terminado. */
END. /* Finaliza o programa. */