#include "fred.h"
#include "sema.h"
#include "fred.h" #include "sema.h" #define NBphilo 7 FredThread philosophe[NBphilo]; FredSemaphore fourchette[NBphilo]; FredSemaphore finRepas; void* codephilo(void * x) { int j,k; int i = (int)x; FredPrintf(" \n philo %d numero %d demarre \n ", FredThreadCurrent(),i); for( j=0;j<100;j++){ FredPrintf(" \n philo %d pense %d éme fois \n ", i,j); for(k=0;k<1000000;k++); /* ça pense ..*/ FredThreadYield(); FredPrintf(" \n philo %d veut manger %d éme fois \n ", i,j); if(i<(NBphilo-1)){ /* un droitier */ FredSemaphoreP(&fourchette[i]);FredSemaphoreP(&fourchette[i+1]); FredPrintf(" \n philo droitier %d mange %d éme fois \n ", i,j); for( k=0;k<1000000;k++); /* ça mange ..*/ FredThreadYield(); FredSemaphoreV(&fourchette[i]);FredSemaphoreV(&fourchette[i+1]); }else{ /* le gaucher */ FredSemaphoreP(&fourchette[0]);FredSemaphoreP(&fourchette[NBphilo-1]); FredPrintf(" \n philo GAUCHER %d mange %d éme fois \n ", i,j); for( k=0;k<1000000;k++);/* ça mange ..*/ FredThreadYield(); FredSemaphoreV(&fourchette[0]);FredSemaphoreV(&fourchette[NBphilo-1]); } } FredSemaphoreV(&finRepas); FredPrintf(" \n philo %d ADIEU \n ", i); return (void*) 0; } int main ( int argc, char** argv) { int i; printf(" C'est parti \n"); FredInitialize(); for( i=0;i<NBphilo;i++) { FredSemaphoreInit(&fourchette[i],1); FredPrintf("Initialisation fourchette[%d]] \n ", i); } FredSemaphoreInit(&finRepas,0); for( i=0;i<NBphilo;i++) { philosophe[i]= FredThreadSpawn(20000,codephilo,(void*)i,(void**)0); FredPrintf("Lancement philosophe[%d]] \n ", i); } FredPrintf("philodsophes lancés !!!! \n "); for(i=0;i<NBphilo;i++)FredSemaphoreP(&finRepas); FredPrintf("philosophes repus !!!! \n "); FredWaitTerminate(); printf(" C'est termine \n"); return 0; }