salut les amis
j'ai un soucis au niveau de mon code et je ne comprend pas d'ou peut provenir mon erreur
en fait j'ai créé 3 thread qui sont censé jongler avec le systeme de gestion de la concurrence mais le probleme c'est qu'ils se bloquent jamais
par exemple si j'ai une ressource a=1 et que le thread l'utilises , les autres sont censé attendre que le thread 1 finisse pour a leur tour utiliser la ressource mais ils ne se bloquent pas
voici le code
et mon main
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 import java.util.concurrent.Semaphore; public class MyThread extends Thread{ //public static int ProcId = 0; Semaphore Sem_Place; Semaphore Sem_Rampe; private static int place_nbr = 1; private static int rampe = 1; MyThread(){ Sem_Place = new Semaphore(this.place_nbr,true); Sem_Rampe = new Semaphore(this.rampe,true); } public void run(){ try { System.out.println("(Proc : "+this.getId()+") Veut rentrer dans le parking !"); this.entrer_parking(); System.out.println("(Proc : "+this.getId()+") Veut sortir du parking !"); this.sortir_parking(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void entrer_parking() throws InterruptedException{ Sem_Place.acquire(); System.out.println("(Proc : "+this.getId()+") a donné sa carte"); Sem_Rampe.acquire(); System.out.println("(Proc : "+this.getId()+") passe sur la rampe"); Sem_Rampe.release(); System.out.println("(Proc : "+this.getId()+") est descendu de la rampe et est garé a sa place !"); } public void sortir_parking() throws InterruptedException{ Sem_Rampe.acquire(); System.out.println("(Proc : "+this.getId()+") passe sur la rampe"); Sem_Rampe.release(); System.out.println("(Proc : "+this.getId()+") est descendu de la rampe"); Sem_Place.release(); System.out.println("(Proc : "+this.getId()+") est sortie du parking...Place liberée !"); } }
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 main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub MyThread P1 = new MyThread(); MyThread P2 = new MyThread(); MyThread P3 = new MyThread(); P1.start(); P2.start(); P3.start(); } }
Partager