TP 7 de Programmation 2e Année Informatique 2003-2004 : Threads
Exercice 1
Récupérez et décompressez snails.tgz. Il s'agit
d'un simulateur de courses d'escargots.
Question 1
Lire les différentes classes.
Question 2
Chaque escargot sera contrôlé par un thread qui augmentera son
abscisse d'une valeur donnée (par exemple 10), fera une pose de
100ms, et ce jusqu'à ce que l'escargot aie passé la ligne
d'arrivée. La classe utilisée sera EscargotControle.
Complétez les classes CourseEscargotAppli et
EscargotControle.
Question 3
On souhaite afficher en fin de course un message annonçant que la
course est terminée. Pour ce faite, on veut utiliser la méthode
join().
Supposons que l'on place les appels de join() dans la
méthode commence(). Que se passe-t-il alors ?
Exercice 2
À faire sur papier.
On considère la classe Pile implémentée ainsi :
public class Pile {
private int vals[];
private int nombreElts;
public Pile(int taille) {
vals= new int[taille];
nombreElts= 0;
}
public void push(int v) {
vals[nombreElts]= v;
nombreElts++;
}
public int getTop() {
return vals[nombreElts-1];
}
public boolean isFull() {
return (nombreElts == vals.length)
}
public void pop() {
nombreElts--;
}
}
Question 1
Supposons que cette classe soit employée par plusieurs
Threads. Donner un exemple de comportement incorrect
possible, en cas d'appel simultané de la méthode push par
deux threads.
Question 2
En supposant que toutes les méthodes de Pile sont synchronized,
Le code :
if (! p.isFull()) {
p.push(v);
}
est-t-il sûr ?
Question 3
Écrire une méthode push() sûre, qui
bloque tant que l'ajout n'est pas possible.
Exercice 3
Soit la classe Pile et la classe TestPile.
Question 0
Essayez le programme tel quel. Il y a toutes les chances qu'il buggue parfois.
Question 1
Programmez la solution de l'exercice 3, et regardez à l'aide
de gtop combien de CPU votre programme utilise.
Vous supprimerez le sleep() dans le thread client, pour
mieux voir la charge du CPU.
Question 2
Modifiez le programme pour qu'il ne fasse pas d'attente
active. On modifiera a priori la classe Pile.
Serge ROSMORDUC