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; }
int main(int argc,char *argv[]){ filosofo(argv[1],argv[2],argv[3],argv[4]); return(0); }