newgame
Messages postés52Date d'inscriptionlundi 2 février 2009StatutMembreDernière intervention24 juillet 2013
-
8 déc. 2012 à 19:20
bébéprogrammeuse -
30 nov. 2013 à 11:43
salut,
j'ai un TP où j’essaie de réaliser fonctionnement en exclusion mutuelle avec l'algorithme du jeton
en deux mot l'explication de l'algorithme:
chaque processus voulant entré en section critique doit acquérir un jeton qu'il demande a tous les autres processus ,un processus qui n' a pas besoin d'acceder à la SC et ayant le jeton le lui envoi
Donc mon problème est quand j’exécute deux instance client et j'initialise le jeton à l'un d'eux le processus ayant le jeton s’exécute normalement mais l'autre ne s’exécute jamais
public class rmiclient extends javax.swing.JFrame {
JTextField prenom = new JTextField();
JTextField nom = new JTextField();
JLabel p = new JLabel("prenom");
JLabel n = new JLabel("nom");
JButton b =new JButton("print");
public rmiclient() {
GridLayout g = new GridLayout(3, 2);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(g);
getContentPane().add(p);
getContentPane().add(prenom);
getContentPane().add(n);
getContentPane().add(nom);
getContentPane().add(b);
b.addActionListener(new ActionListener() {
public static boolean a_jeton=Boolean.parseBoolean(System.getProperty("a_jeton"));
public static boolean using_jeton=false;
public static int id=Integer.parseInt(System.getProperty("id"));
public static int nbclient = Integer.parseInt(System.getProperty("nbclient"));
public static Token stub[] = new Token[nbclient];
public static int nbreq[];
public static int jeton[];
static {
for (int i = 0; i < nbclient; i++) {
if (i != id) {
try {
stub[i] = (Token) Naming
.lookup("rmi://127.0.0.1:3333/rmiServer"+ (i + 1));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Quel est ton problème exactement ? Comme l'a dit Julien39, si tu veux simuler des processus Java, regarde du côté des Thread. Ton code étant vraiment gros, je n'ai pas eu le temps de tout lire. Voilà ce que je ferais vite fait (ça peut ne pas coller avec ce que tu fais/veux, mais dis nous aussi où ça coince) :
Je ferais une classe avec ta variable à mettre en exclusion mutuelle, cette variable étant private. A la limite je passerais par de la généricité pour faire une classe pouvant stocker dans sa variable des objets de n'importe quel type. A la limite cette classe peut faire office de sémaphore de type mutex. Tu fais deux méthodes, une P (permission/prise) et une V (libération). Tu fais un attribut de cette classe comptant le nombre de processus pouvant être sur ta ressource en private. Si un processus est bloqué, tu peux lui mettre un sleep ou un wait, regarde dans l'API Java s'il y a moyen de les faire s'endormir indéfiniment, et de les réveiller avec un signal. Sinon, tu peux mettre en place un pattern Observer/Observable mais je doute que tout ça se fasse bien au final car tu utilises RMI.
--
Pylouq Heureux sont ceux qui lisent le Réglement, ils ne finiront peut-être pas au bûcher.
newgame
Messages postés52Date d'inscriptionlundi 2 février 2009StatutMembreDernière intervention24 juillet 2013 11 déc. 2012 à 20:35
merci à tous ceux qui m'ont aidé et essayé de me donner des solutions, c bon mon problème est résolu l'erreur était dans le client RMI
en résumé le problème était surtout causé par l'invocation à distance
merci pour tout
Vous n’avez pas trouvé la réponse que vous recherchez ?