Avez vous le programme des philosophes
Dernière réponse : dans Programmation
Bonjour,
Voila j'aimerai savoir si qq'un a deja fait le programme des philosophes qui doivent manger des pates avec des fourchettes. Il me le faudrait dans le langage C (pas C++). Voila je vous remerci d'avance.
Voila j'aimerai savoir si qq'un a deja fait le programme des philosophes qui doivent manger des pates avec des fourchettes. Il me le faudrait dans le langage C (pas C++). Voila je vous remerci d'avance.
Autres pages sur : programme philosophes
Lassé par la pub ? Créez un compte
Bon ben je pensais que ce programme éte connu de tous les programerzz mais je me suis trompé.
Alors voila le sujet:
C'est 5 philosophes qui mangent des spaguettis qui sont trop glissantes. Ils disposent chacun d'une fourchette (5 au total donc) mais le probleme c'est qu'ils ont besoin de 2 fourchettes et doivent donc prendre celle du voisin pour manger. Il faut donc gérer le programme avec des sémaphores pour qu'ils ne mangent pas en même temps et tout.
Donc si qq'un a deja fait ce programme je le prend volontier.
Voila merci beaucoup
Alors voila le sujet:
C'est 5 philosophes qui mangent des spaguettis qui sont trop glissantes. Ils disposent chacun d'une fourchette (5 au total donc) mais le probleme c'est qu'ils ont besoin de 2 fourchettes et doivent donc prendre celle du voisin pour manger. Il faut donc gérer le programme avec des sémaphores pour qu'ils ne mangent pas en même temps et tout.
Donc si qq'un a deja fait ce programme je le prend volontier.
Voila merci beaucoup
en plus avec deux cerveaux tu devrais trouver facilement
http://forum.presence-pc.com/profilebdd.php?id=83158&ca...Métier / Occupations : Etudiants
FMR-Hunter a écrit
mais pk des philosophes?
mais pk des philosophes?
Pour qu'ils laissent la main à leurs voisins de temps en temps: un philosophe, ça mange un peu, et puis ça réfléchit, et puis ça re-mange un peu, et puis ça réfléchit...
Si tu mets des gourmands, ils vont se mettre à manger et ne s'arrêteront pas avant d'avoir fini leur assiette, c'est moins intéressant
Ton premier post date du 05, au lieu d'attendre une version toute faite tu aurais pu t'y mettre et le coder ce programme. S'il y a des choses que tu ne comprends pas sur les sémaphores et co, il aurait suffit de demander et tu aurais trouvé des gens pour te les expliquer...
Ca fait peut-être vieux jeu de dire ça, mais comment feras-tu lorsque tu travailleras? Tu demanderas à tes collègues de faire ton travail? Ne rêve pas, ça n'arrivera pas...
Bon alors je vais t'expliquer vite fait, c'est tres simple.
Il se trouve que j'avais 2 projets à faire pendant les vacances mais que je n'habite pas ou je suis à l'ecole. Je suis donc rentrer chez moi SANS mon PC. Ce qu'il fait que je n'ai pas pu travailler mes devoirs d'info. Or cette semaine j'ai choisi de faire le premier projet, beaucoup plus abordable pour moi. C'est pourquoi je n'ai pas vraiment pu me documenter sur les semaphores et companie.
Je comprend tres bien que demander les sources ne m'apportera rien du tout au contraire et qu'en entreprise je ne pourrais pas réagir comme ça.
Mais ceci est un cas d'extreme urgence, et sache que même avec les sources je chercherai à comprendre pour ne pas mourrir con.
Voila en esperant que vous ayez compris mon probleme...
Merci d'avance les gars je compte sur vous
Il se trouve que j'avais 2 projets à faire pendant les vacances mais que je n'habite pas ou je suis à l'ecole. Je suis donc rentrer chez moi SANS mon PC. Ce qu'il fait que je n'ai pas pu travailler mes devoirs d'info. Or cette semaine j'ai choisi de faire le premier projet, beaucoup plus abordable pour moi. C'est pourquoi je n'ai pas vraiment pu me documenter sur les semaphores et companie.
Je comprend tres bien que demander les sources ne m'apportera rien du tout au contraire et qu'en entreprise je ne pourrais pas réagir comme ça.
Mais ceci est un cas d'extreme urgence, et sache que même avec les sources je chercherai à comprendre pour ne pas mourrir con.
Voila en esperant que vous ayez compris mon probleme...
Merci d'avance les gars je compte sur vous
Bon moi je ne l'ai pas codé, mais je l'ai eu comme exemple pour un TP Unix il y a deux ans.
En espérant que ça t'aide !
En espérant que ça t'aide !
/*----------------------------------------------------------
Le probleme des philosophes :
threads et variables condition
idee : un seul wait par philosophe
=> 1 var. condition par philosophe
=> condition attachee aux 2 baguettes
=> fin de repas : signal sur chacune des var
conditions adjacentes
---------------------------------------------------------*/
#include <stdio.h>
#include <pthread.h>
#define NbPhilosophes 5
#define TempsMaxRepas 3
//------------ debut pack2age condition (termes a adapter a chaque pb)
typedef enum {Faux=0,Vrai} bool;
typedef struct {
pthread_cond_t cond;
pthread_mutex_t mutex;
bool baguetteLibre[NbPhilosophes]; /* pour chq philosophe i :
i -> baguette gauche,
i+1 -> baguette droite */
} tpack2;
typedef void (*tfonction1) (tpack2*);
typedef bool (*tfonction2) (tpack2*,int);
typedef void (*tfonction3) (tpack2*,int);
tpack2 pack2;
void pack2_init(tpack2 *ppack2,tfonction1 initTermes)
{
initTermes(ppack2);
pthread_cond_init(&pack2.cond,NULL);
pthread_mutex_init(&pack2.mutex,NULL);
}
void pack2_attendre(tpack2 *ppack2,tfonction2 propositionVraie,int i,tfonction3 action)
{
pthread_mutex_lock(&ppack2->mutex);
while (! propositionVraie(ppack2,i))
pthread_cond_wait(&ppack2->cond,&ppack2->mutex); // deverrouille mutex pendant blocage
if (action!=NULL) action(ppack2,i);
pthread_mutex_unlock(&ppack2->mutex);
}
void pack2_signalerTousSystematiquement(tpack2 *ppack2,tfonction3 action,int i)
{
pthread_mutex_lock(&ppack2->mutex);
if (action!=NULL) action(ppack2,i);
pthread_cond_broadcast(&ppack2->cond);
pthread_mutex_unlock(&ppack2->mutex);
}
//---------------- CODE PHILOSOPHE -----------------------
void initTermes(tpack2 *ppack2)
{
int i;
for (i=0;i<NbPhilosophes;i++) {
ppack2->baguetteLibre[i] = Vrai;
}
}
bool QlesDeuxBaguettesLibresPour(tpack2 *ppack2,int i)
{
int iPlus1=(i+1) % NbPhilosophes;
return ppack2->baguetteLibre[i] && ppack2->baguetteLibre[iPlus1];
}
void prendrelesDeuxBaguettesPour(tpack2 *ppack2,int i)
{
int iPlus1=(i+1) % NbPhilosophes;
ppack2->baguetteLibre[i]=ppack2->baguetteLibre[iPlus1]=Faux;
}
void libererlesDeuxBaguettesPour(tpack2 *ppack2,int i)
{
int iPlus1=(i+1) % NbPhilosophes;
ppack2->baguetteLibre[i]=ppack2->baguetteLibre[iPlus1]=Vrai;
}
void simule(int i)
{
printf("le philosophe %d commence a manger\n",i);
sleep(rand()%TempsMaxRepas);
printf("le philosophe %d a fini de manger\n",i);
}
void* philosophe(void *p)
{
int i= * (int*) p;
pack2_attendre(&pack2,QlesDeuxBaguettesLibresPour,i,prendrelesDeuxBaguettesPour);
simule(i);
pack2_signalerTousSystematiquement(&pack2,libererlesDeuxBaguettesPour,i);
return NULL;
}
//---------------------- MAIN ------------------------------
main(int argc,char* argv[])
{
pthread_t thread[NbPhilosophes];
int i;
int nom[NbPhilosophes]; // chq philosophe doit connaitre son nom
srand(getpid()); // init generateur nb aleatoires
pack2_init(&pack2,initTermes);
for (i=0;i<NbPhilosophes;i++) {
nom[i]=i;
pthread_create(&thread[i],NULL,philosophe,&nom[i]);
}
for (i=0;i<NbPhilosophes;i++)
pthread_join(thread[i],NULL);
printf("-- TOUS LES PHILOSOPHES ONT MANGES --\n");
}
Bon déjà merci à vous.
Ensuite j'ai 2, 3 choses à dire.
Tout d'abord un grand merci à Farvil pour la source, jvais matter ce que ca vos et TENTER DE COMPRENDRE.
Pour KangOl, je suis d'accord d'avoir des sources buguées (mais pas à mort quand meme) comme ça, ça va me faire réflechir, c'est pas une mauvaise idée c'est vrai.
Et pour finir merci aussi à ffomnislash, j'attend tes sources si tu les trouves.
THX ALL !!
Ensuite j'ai 2, 3 choses à dire.
Tout d'abord un grand merci à Farvil pour la source, jvais matter ce que ca vos et TENTER DE COMPRENDRE.
Pour KangOl, je suis d'accord d'avoir des sources buguées (mais pas à mort quand meme) comme ça, ça va me faire réflechir, c'est pas une mauvaise idée c'est vrai.
Et pour finir merci aussi à ffomnislash, j'attend tes sources si tu les trouves.
THX ALL !!
Bin dis donc, t'en as de la chance avec tes sources. J'en ai jamais moi des si bien rôties
Un conseil : si tu comprends pas en cours, c pas bien mais c pas grave. Par contre, faut ke tu revois les cours ke t'as pas compris dans la semaine ... et là tu comprendras tout ... normalement. Moi ça marche comme ça en tt cas.
Et rien de tel ke d'essayer, de tester, de mettre les mains dans la merde pour pouvoir vraiment comprendre
Et ça c pas un philosophe ki l'a dit
c moi
Un conseil : si tu comprends pas en cours, c pas bien mais c pas grave. Par contre, faut ke tu revois les cours ke t'as pas compris dans la semaine ... et là tu comprendras tout ... normalement. Moi ça marche comme ça en tt cas.
Et rien de tel ke d'essayer, de tester, de mettre les mains dans la merde pour pouvoir vraiment comprendre
Et ça c pas un philosophe ki l'a dit
c moi
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumQuel processeur avez vous
- ForumAvez vous un filtre video miracle
- ForumAvez vous deja pleure devant un film
- ForumAvez vous vu un pure bug de windaube
- ForumAvez vous des code pour splinter cel3
- ForumVous avez achete une xbox
- ForumSondage vous avez quoi comme distrib
- articlesVous avez quoi comme voiture de fonction
- articlesApple vous avez dit apple
- ForumVous avez un messageson pour outlook
- Voir plus
