Académique Documents
Professionnel Documents
Culture Documents
Exercice 1 :
On considère le programme concurrent suivant :
import java.util.concurrent.*;
public class Test {
static int x = 0 ;
static Semaphore S1 = new Semaphore(1) ;
static Semaphore S2=new Semaphore(0);
1
}
catch(Exception e)
{}
Test.x=Test.x+3;
Test.S2.release();
Test.S1.release();
}}
Exercice 2 :
Il s'agit de garantir à un processus qu'il sera le seul à un instant donné, à exécuter une portion
critique de son code. En d'autres termes, plusieurs processus exécutent le programme suivant
en parallèle :
class P extends Thread
{
while (true)
{
< section non critique >
(* essayer d'entrer en section critique *)
< section critique >
(* sortir de la section critique *)
}
}
Soit une solution qui utilise les trois variables globales flag[0] : boolean, flag[1] : boolean,
token : 0..1, initialisées respectivement à false, false, 0.
2
{
< section non critique >
flag[1] := true;
while (token != 1)
{
While ( flag[0] = =true)
{
}
token = 1
}
< section critique >
flag[1] = false;
}
}}
Montrez, en donnant une exécution (à chaque instant, un seul des processus effectue une
action) possible de ce programme, que cette solution est fausse du fait qu'il est possible que
les deux processus soient simultanément en section critique.
Exercice 3 :
Une piscine qui contient C cabines peut contenir au maximum un nombre N de nageurs.
Chaque nageur dispose d'un panier pour ranger ses habits ; il y a donc P paniers.
Pour se déshabiller, les nageurs ont besoin d'une cabine et d'un panier pour placer leurs habits.
Pendant qu'ils se baignent, ils conservent le panier. Après la baignade, il leur faut à nouveau
une cabine pour se ré-habiller. Enfin, avant de sortir, ils libèrent le panier et la cabine.
Les conditions d'utilisation sont les suivantes :
1) il y a P paniers disponibles pour ranger leurs habits ; il ne pourra donc pas y
avoir plus de P baigneurs simultanément ;
2) il y a d'autre part C cabines d'habillage, avec 1 < C << P<<N.