int main(int args, char* argc[])
{
  int ret, i, semid;
  stop = 0;
  
  //Imposto la terminazione catturando SIGINT
  signal(SIGINT, termina);
  
  if( (semid = semget(SEMKEY, NFILOSOFI, IPC_CREAT|0666)) == -1 )
  {
    semctl(semid, NFILOSOFI, IPC_RMID);
    if( (semid = semget(SEMKEY, NFILOSOFI, IPC_CREAT|0666)) == -1 )
    {
      printf("Impossibile creare un semaforo\n");
      exit(1);
    }
  }
  
  semctl(semid, 0, SETVAL, 1);
  semctl(semid, 1, SETVAL, 1);
  semctl(semid, 2, SETVAL, 1);
  semctl(semid, 3, SETVAL, 1);
  semctl(semid, 4, SETVAL, 1);
  
  //Inizializza il random seed
  srand(time(NULL));
  
  //Creo i 5 filosofi
  for(i = 0; i < NFILOSOFI; i++)
  {
    ret = fork();
    //Il primo filosofo ha l'ultima bacchetta (NBACCHETTE-1 poichè la prima bacchetta è 0) e la prima bacchetta (i = 0)
    if(ret == 0 && i == 0)
      filosofo(semid, i, NBACCHETTE-1, i);
    else if(ret == 0 && i > 0)
      //i-1 è la sinistra, i è la bacchetta destra (infatti il primo e l'ultimo filosofo condividono l'ultima bacchetta
      filosofo(semid, i, i-1, i);
    else if(ret == -1)
    {
      printf("Il sistema si rifiuta di creare altri processi! Termino\n");
      exit(0);
    }
    fpid[i] = ret;
  }
  
  for(i = 0; i < NFILOSOFI; i++)
    wait(0);
  
  printf("Bye Bye!\n");
  
  return 0;
}
예제 #2
0
int main(int argc,char *argv[]){
  filosofo(argv[1],argv[2],argv[3],argv[4]);
  return(0);
}