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

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 !");
	}
 
 
}
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
 
 
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();
 
	}
 
}