programación de "La cena de los filósofos" (hilos y semáforos)

Imagen de Skator
0 puntos

Hola amigos, estoy empezando con la programación el linux, bueno, mi problema es resolver el conocido problema de "la cena de los filósofos" con hilos y semáforos, pues creo que el el código ya lo tengo, este código ya no marca ningún error a la hora de compilar, el problema está a la hora de correrlo, ya que cuando lo ejecuto me sale la siguiente pantall:

Filosofo pensando...
Fallo de segmentación

y después ya no hace nada, espero me puedan ayudar con este problemilla, o que me orienten por si algo del código está mal.
De antemano muchas gracias!!

NOTA: no se xq no se ven las librerías, pero si incluí todas las necesarias

#include
#include
#include
#include
#include
#include
#include
#include

#define N 5
#define LEFT (i-1)&N
#define RIGHT (i+1)&N
#define THINKING 0
#define HUNGRY 1
#define EATING 2
#define TRUE 1

int state[N];
sem_t mutex;
sem_t s[N];

void think(){ printf("\nFilosofo pensando...\n"); }
void eat(){ printf("\nFilosofo comiendo...\n"); }

void test(int i)
{
if(state[i] == HUNGRY && state[LEFT] != EATING && state[RIGHT] != EATING)
{
state[i] = EATING;
sem_post(&s[i]);
}
}

void take_forks(int h)
{
sem_wait(&mutex);
state[h] = HUNGRY;
test(h);
sem_post(&mutex);
sem_wait(&s[h]);
}

void put_forks(int i)
{
sem_wait(&mutex);
state[i] = THINKING;
test(LEFT);
test(RIGHT);
sem_post(&mutex);
}

void philosopher(void *i)
{
int item;
int h=(int)i;
while(TRUE)
{
think();
take_forks(h) ;
eat();
put_forks(h);
}
}

void main(){

int j=0;
pthread_t f1[N];//,f2,f3,f4,f5;
sem_init(&mutex,0,1);

for(j=0;j<5;j++) {

sem_init(&s[j],0,0);
//j=(void) j;
pthread_create(&f1[j], NULL,(void *) &philosopher ,(void *) &j);
}

for(j=0;j<5;j++) {
pthread_join(f1[j], NULL);
}
}

Imagen de Capa
+1
0
-1

Movido de "La línea de comandos" al foro "Desarrollo".

+1
0
-1