Semaphore ! ne s'arrete jamais
salut les amis :yaisse2:
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 :aie:
voici le code
Code:
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:
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();
}
} |