kaenef_irt
Messages postés121Date d'inscriptiondimanche 27 août 2006StatutMembreDernière intervention19 mai 2015
-
25 juin 2009 à 11:04
kaenef_irt
Messages postés121Date d'inscriptiondimanche 27 août 2006StatutMembreDernière intervention19 mai 2015
-
26 juin 2009 à 18:05
Bonjour,
je suis un passionné de programmation et voilà je debute en programmation systeme(en autodidacte).un ami a moi m'a parlé du fameux probleme des philosophes.en cherchant sur internet je suis tombé sur un programme(en JAVA) que j'ai un peu modifié afin de pouvoir entrer les parametres moi meme.mais ce pendant je souhaiterai pouvoir le modifier encore afin de :
-pouvoir determiner moi meme lequel des philosophes doit commencer à manger - et si possible interrompre un philosophe entrain de manger pour que son voisin puisse manger.
je pense qu'en comprenant mieux le programme je pourrais bien le modifier alors j'aimerais que quelqu'un puisse m'explique l'implementation des classes (en particulier les bolcs en gras) de ce programme.
quelle est le role des differentes methodes de ces classes?
le programme est le suivant:
(il comporte trois classes(fichiers) phil, philosophers et informable **************************************
import java.io.*;
public class phil implements Informable
{ public static void main(String args[])
{ int n = 0;
if (args.length > 0)
{ try { n = Integer.parseInt(args[0]); }
catch (NumberFormatException e) {}
} System.out.println("entrer le nombre de philosophes");
n=lireInt();
new Philosophers(new phil()).startPhilosophers(n);
}
private static final String doing[] = {"thinking", "hungry", "eating"};
/*
public synchronized void inform(int changed, int state)
{ String doing = "";
switch (state)
{ case Philosophers.THINKING:
doing = "thinking";
break;
case Philosophers.HUNGRY:
doing = "hungry";
break;
case Philosophers.EATING:
doing = "eating";
break;
}
System.out.println(changed + " " + doing);
}*/
public synchronized void inform(int changed, int state)
{ System.out.println(changed + " " + doing[state]);
}
public static int lireInt()
{ int ligne=0;
String ligneLue=null;
char car;
do {
car='o';
try {
ligneLue=lireString();
ligne=Integer.parseInt(ligneLue);
}
catch (NumberFormatException e) {
System.out.println("ERREUR DE LECTURE");
System.out.println("Veuillez entrer un nombre entier.");
car='n';
}
}while (car=='n');
return ligne;
}
public static String lireString()
{ String ligne=new String();
try {
InputStreamReader f=new InputStreamReader(System.in);
BufferedReader lecteur=new BufferedReader(f);
ligne=lecteur.readLine();
}
catch (IOException e) {
System.out.println("ERREUR DE LECTURE");
System.exit(1);
}
return ligne;
}
}
***********************************
import java.util.*;
public class Philosophers implements Runnable
{ private static final int MINTHINK = 20000;
private static final int MAXTHINK = 40000;
private static final int MINEAT = 20000;
private static final int MAXEAT = 40000;
public static final int THINKING = 0;
public static final int HUNGRY = 1;
public static final int EATING = 2;
private Informable animator;
private Random rnd = new Random();
private boolean isRunning = false;
private int n = 0;
private boolean chopstickFree[] = null;
private Thread th[] = null;
Philosophers(Informable a)
{ animator = a;
} public void startPhilosophers(int n)
{ if (isRunning) stopPhilosophers();
this.n = n;
chopstickFree = new boolean[n];
th = new Thread[n];
for (int i = 0; i < n; i++)
chopstickFree[i] = true;
for (int i = 0; i < n; i++)
(th[i] = new Thread(this, "" + i)).start();
isRunning = true;
}
public void stopPhilosophers()
{ if (isRunning)
{ for (int i = 0; i < n; i++)
th[i].interrupt();
isRunning = false;
}
}
private int me()
{ return Integer.parseInt(Thread.currentThread().getName());
}