Académique Documents
Professionnel Documents
Culture Documents
methode run ,
la methode run .
comme paramettre
2- Pour chacune de ces questions, cocher les affirmations qui sont vraies
(0,5 point par bonne réponse, −0,5 point par mauvaise réponse) (5 pts)
Pour chaque question, cocher les affirmations qui sont vraies (0,5 point
par bonne réponse, −0,5 point par mauvaise réponse)
1- Quelle est la méthode qui permet de démarrer un thread :
◻ init() ;
◻ start() ;
◻ resume() ;
◻ run() ;
I1; J1;
V(SA); V(SB);
P(SB); P(SA);
I2; J2;
◻ Rien du tout.
6- Quand un thread est-il considéré comme mort ?
Soient deux villes VILLE1 et VILLE2 sont reliées par une seule
voie de chemin de fer. Les trains peuvent circuler dans un seul
sens à la fois de la VILLE1 vers la VILLE2 ou de la VILLE2
vers la VILLE1. On considère deux classes de processus : les
trains allant de la VILLE1 vers la VILLE2 (Train V1V2) et les
trains allant de la VILLE2 vers la VILLE1 (Train V2V1). Ces
processus se décrivent comme suit :
sémaphores
SV=1 ,mutex1=1 ,mutex2=0 ;
int compteurV1=0 ,
compteurV2=0 ;
P(mutex1) compteurV1=
compteurV1= V(SV) ;
compteurV1+1 ; }
V(mutex2) ;
P(SV) ;
V(mutex1) ;
}
}
V(mutex1) ;
Demande d’accès à la
voie par la VILLE2
() {
P(mutex2)
if compteurV2 ==0 {
compteurV2=
compteurV1+1 ;
P(SV) ;
V(mutex2) ;
}
Sortie de la voie
par la VILLE1 (){
P(mutex2)
if compteurV2 ==1 {
compteurV2=
compteurV2+1 ;
V(SV) ;
}
V(mutex1) ;
V(mutex2) ;
}
Exercice 2 : Les moniteurs en java(7pts)
Import java.util.concurrent.locks.* ;
int tampon[];
int m,N ;
int NbPleins=0,tete=0,queue=0 ;
Condition NPlien=verrou.newCondition() ;
Monite
ur java
< 1.5 public int consommer ()
public void produire (int m){
verrou.lock();
verrou.lock();
try {
if (NbPleins == 0)
try { NVide.await();
tampon[queue] = m;
NbPleins--;
System.out.println(Thread.
NbPleins++;
currentThread().getName() +
} finally {
NVide.signal();
verrou.unlock();
} finally {
}
verrou.unlock();
Monite
public synchronized …public synchronized
ur java
> 1.5
void produire (int m){ int consommer (int m){
{ wait(); } { wait(); }
NbPleins++; NbPleins--;
System.out.println(Thread.cur notifyAll();
rentThread().getName() +" System.out.println(Thread.cu
vient de produire "+ m) ; rrentThread().getName() + "
notifyAll();
vient de consommer " + m) ;
return m ; }
4/4