Sami Naifar PIITMW G1
Compte Rendu TP 4 – Algorithmes Parallè les
Exercice 1 :
Classe Passager :
import java.util.Random;
import java.util.concurrent.Semaphore;
public class Passager extends Thread {
String name;
Semaphore sem;
//Déclarer le sémaphore appelé sem
Random r = new Random();
public Passager(String pName, Semaphore pSem){
name = pName;
sem = pSem;
}
public void run() {
//Simuler la demande d’une autorisation au minibus
try {
sem.acquire();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
int pause =r.nextInt(6000)+10000;
System.out.println(name + " : Je reste au minibus pendant " + pause/1000 +
" sec");
try {
sleep(pause);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.err.println(name + " : Au revoir. Je quitte le mini-bus. ");
//Simuler la libération du minibus
sem.release();
}
}
Class Minibus :
import java.util.concurrent.Semaphore;
public class Minibus {
public static void main(String[] args) {
Sami Naifar PIITMW G1
// Simulez le transport de 20 passagers dans un minibus
comportant 7 sièges
Semaphore semaphore = new Semaphore(7, true);
for(int i=0;i<21;i++){
Thread t1 = new Passager("SR", semaphore);
t1.start();
}
Interprétation :
Exercice 2 :
Class Sportif :
import java.util.concurrent.Semaphore;
public class Sportif extends Thread{
String nom;
Salle s;
public Sportif(String nom, Salle s) {
this.nom = nom;
this.s = s;
}
public void ChangerTenu() {
s.RéserverCabine();
System.out.println(nom+": Tenu changer");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
s.LibérerCabine();
}
public void Jouer() {
System.out.println(nom+": Joueur est entrain de jouer");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.err.println(nom+": fin de session");
Sami Naifar PIITMW G1
public void run() {
ChangerTenu();
s.RéserverCasier();
Jouer();
s.LibérerCasier();
ChangerTenu();
public static void main(String[] args) {
Semaphore nombreCabines = new Semaphore(2);
Semaphore nombreCasiers = new Semaphore(10);
Salle salle = new Salle(nombreCabines, nombreCasiers);
for (int i = 0; i < 20; i++) {
Sportif sp = new Sportif(""+i, salle);
sp.start();
}
}
}
Class Salle :
import java.util.concurrent.Semaphore;
public class Salle {
Semaphore nombreCabines ;
Semaphore nombreCasiers ;
public Salle(Semaphore nombreCabines, Semaphore nombreCasiers) {
this.nombreCabines = nombreCabines;
this.nombreCasiers = nombreCasiers;
}
public void RéserverCabine() {
try {
nombreCabines.acquire();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Cabine résréver");
}
public void LibérerCabine() {
nombreCabines.release();
System.err.println("Cabine libérer");
Sami Naifar PIITMW G1
}
public void RéserverCasier() {
try {
nombreCasiers.acquire();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("casier résréver");
}
public void LibérerCasier() {
nombreCasiers.release();
System.err.println("casier libérer");
}
Interprétation :
Exercice 3 :
Class Employe :
package EX3;
public class Employe extends Thread{
int nombre;
Fontaine fontaine ;
int cap;
public Employe(int nombre, Fontaine fontaine, int cap) {
this.nombre = nombre;
this.fontaine = fontaine;
this.cap = cap;
}
public Employe(int nombre, Fontaine fontaine) {
super();
this.nombre = nombre;
this.fontaine = fontaine;
}
public void run() {
fontaine.remplir_verre(this);
}
Sami Naifar PIITMW G1
}Class Fontaine :
package EX3 ;
import java.util.concurrent.Semaphore;
public class Fontaine {
int capacite= 4000;
Employe employe;
int capacitemin;
Semaphore sem;
public Fontaine(Semaphore sem) {
super();
this.sem = sem;
}
public void remplir_verre(Employe emp){
capacitemin=emp.cap;
System.out.println("Employe "+emp.nombre+" place son verre de
"+emp.cap+" ml");
if (capacite>emp.cap){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
capacite=capacite-emp.cap;
System.out.println("Le verre est rempli... ");
}else{
try {
System.out.println("Bouteille est vide en attente de
son remplacement");
//wait();
sem.acquire();
} catch (InterruptedException e) {
e.printStackTrace();
}
Sami Naifar PIITMW G1
System.out.println(capacite);
public void remplacer_Bouteille(){
System.out.println("Remplacement du bouteille...");
try {
Thread.sleep(1000);
capacite=4000;
System.out.println("Bouteille remplacée...");
sem.release();
} catch (InterruptedException e) {
e.printStackTrace();
public static void main(String[] args) {
Semaphore sem = new Semaphore(1);
final Fontaine fontaine = new Fontaine(sem);
for (int i = 1; i <= 25; i++) {
int cap = (int) (Math.random() * ((500 - 100) + 1)) + 100;
Employe emp = new Employe(i, fontaine,cap);
emp.start();
try {
emp.join();
} catch (InterruptedException e) {
e.printStackTrace();
if (fontaine.capacite<emp.cap) {
new Thread(){
public void run() {
fontaine.remplacer_Bouteille();
Sami Naifar PIITMW G1
};
}.start();
}
}
Interprétation :