bonjour
je ne sais pas si j'ai choisi le bon endroit pour poster mon message.mais je cherche la résolution de l'algorithme de peterson à l'aide des automate comme ceci http://www.lb.auf.org/chebaro/ pour les algorithmes de synchronisation.
Merci
bonjour
je ne sais pas si j'ai choisi le bon endroit pour poster mon message.mais je cherche la résolution de l'algorithme de peterson à l'aide des automate comme ceci http://www.lb.auf.org/chebaro/ pour les algorithmes de synchronisation.
Merci
salut aussi je sais pas si c est le bon endroit pour poster sa .........
mon problème c est que la console n affiche rien (quelle Processus est entrée a la section critique) voila le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 public class peterson extends Thread { static int tour = 0; static boolean[] drapeau = {false,false}; int i, j; peterson(int x){i = x; j = 1-x;} public void run() { while (true) { drapeau[i] = true; tour = j; while (drapeau[j] && tour==j) System.out.println("resourse utilisé par le thread" + j); drapeau[i]=false; } } public static void main(String[] args) { Thread thread0 = new peterson(0),thread1 = new peterson(0); thread0.start(); thread1.start(); } }
Algorithme Peterson pour 2 processus :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 public class Peterson implements Runnable { private static boolean[] in = { false, false }; private static volatile int turn = -1; public static void main(String[] args) { new Thread(new Peterson(0), "Thread - 0").start(); new Thread(new Peterson(1), "Thread - 1").start(); } private final int id; public Peterson(int i) { id = i; } private int other() { return id == 0 ? 1 : 0; } @Override public void run() { in[id] = true; turn = other(); while (in[other()] && turn == other()) { System.out.println("[" + id + "] - Waiting..."); } System.out.println("[" + id + "] - Working (" + ((!in[other()]) ? "other done" : "my turn") + ")"); in[id] = false; } }
Vous faites un concours de déterrage de Threads?
Et accessoirement, en théorie il ne suffit pas que int turn tout seul soit volatile.
Il faudrait que les booléens de in le soient aussi, ce qui est impossible avec un tableau normal.
Une solution serait d'utiliser un AtomicIntegerArray et de s'en servir comme un tableau de booléens.
Partager