Problema De Los Filosofos Comensales
SISTEMAS OPERATIVOS
PROBLEMA DE LOS FILOSOFOS COMENSALES
#include
#include
#define N 5/*numero de filósofos*/
#define LEFT (i-1)%N /*numero del vecino de la izquierda dei*/
#define RIGHT (i+1)%N /*numero del vecino de la derecha de i*/
#define THINKING 0/*el filosofo está meditando*/
#define HUNGRY 1/*el filosofo intenta tomar los tenedores*/
#defineEATING 2/*el filosofo está comiendo*/
typedef int semaphore;/*los semáforos son un tipo especial de int*/
int state[N]; /*arreglo para llevar el control del estado de todas las personas*/semaphore mutex =1; /*exclusión mutua de regiones criticas*/
semaphore s[N]; /*un semáforo por filosofo*/
philosopher(i)
int i,TRUE; /*numero de filosofo de 0 a N-1 */
{while (TRUE){ /*repetir indefinidamente*/
think(); /*el filosofo está meditando*/
take_forks(i); /*tomar dos tenedores o bloquearse*/
eat();/*que rico espagueti*/
put_forks(i); /*volver a colocar ambos tenedores sobre la mesa*/
}
}
take_forks(i)
int i; /*numero de filosofo de 0 a N-1*/{
down(mutex); /*meter a la región critica*/
state[i]=HUNGRY; /*registrar el hecho de que el filosofo i tiene hambre*/
test(i); /*intenta tomar dos tenedores*/up(mutex); /*salir de la región critica*/
down(s[i]); /*bloquear si no se tomaron los tenedores*/
}
put_forks(i)
int i; /*numero de filosofo de 0 a N-1*/
{down(mutex); /*meter a la región critica*/
state[i]=THINKING; /*el filosofo ha terminado de comer*/
test(LEFT); /*ver si ahora puede comer el vecino de la izquierda*/
test(RIGHT);/*ver si ahora puede comer el vecino de la derecha*/
up(mutex); /*salir de la región critica*/
}
test(i);
int i; /*numero de filosofo de 0 a N-1*/
{
if (state[i] ==...
Regístrate para leer el documento completo.