:: Enseignements :: ESIPE :: E4INFO :: 2016-2017 :: Concurrence ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Examen de concurrence sur table |
Vous avez droit à aucun document.
Exercice 1 - Questions de cours (7)
Répondez aux questions suivantes en deux ou trois phrases, pas plus,
et SVP répondez à la question pas au mot-clef.
-
Qu'est ce qu'une classe thread-safe ?
-
A quoi sert la méthode join de la classe java.lang.Thread ?
-
Le code suivant a t'il un problème de publication ?
public class Foo {
private int a;
private final long b;
public Foo(int a, long b) {
this.a = a;
this.b = b;
}
}
Si oui, pourquoi ? si non pourquoi ?
-
Le code suivant a t'il un problème de publication ?
public class Foo {
private volatile int a;
private long b;
public Foo(int a, long b) {
this.a = a;
this.b = b;
}
}
Si oui, pourquoi ? si non pourquoi ?
-
Quelles sont les deux raisons pour lesquels il faut mettre les appels
à wait à l'intérieur d'une boucle while.
-
Que veut dire réentrant ? Un block synchronized est-il réentrant ?
-
A quoi correspond le paramètre corePoolSize de la classe ThreadPoolExecutor ?
Exercice 2 - Sync (7)
On souhaite écrire une classe thread safe Sync qui possède deux méthodes safe
et inSafe. La méthode safe garantie que une seule thread peut exécuter
le code d'un Supplier à la fois (et ce quel que soit le Supplier). La méthode inSafe,
renvoie vrai si une thread est entrain d'exécuter un Supplier avec la méthode safe en même temps.
public class Sync<V> {
public boolean inSafe() {
// TODO
}
public V safe(Supplier<? extends V> supplier) {
return supplier.get(); // TODO
}
}
-
Indiquer le code d'une classe Counter ayant une méthode count
qui renvoie une valeur et incrémente celle-ci à chaque appel.
Votre implantation devra utiliser la classe Sync et supposant qu'il existe
déjà une implantation.
-
Indiquer, de plus, le code du main de la classe Counter qui créé
un compteur et deux threads qui chacune affiche les valeurs renvoyées par le conpteur
dans une boucle infinie.
-
Indiquer un second code pour la méthode main en utilisant un Executor.
-
Indiquer un code pour la classe Sync en utilisant le mot clé synchronized.
-
Indiquer un code pour la classe Sync en utilisant un verrou du package
java.util.concurrent.
-
La méthode inSafe du code précédent peut être lock free.
Proposer une nouvelle implantation pour la classe Sync avec une méthode inSafe lock free.
Exercice 3 - PermitSync (6)
On souhaite écrire une classe thread safe PermitSync qui possède une méthode safe.
La méthode safe garantie qu'un nombre de threads inférieur ou égal à permits
peuvent exécuter le code des Supplier en même temps (et ce quel que soit le Supplier).
public class PermitSync<V> {
public PermitSync(int permits) {
// TODO
}
public V safe(Supplier<? extends V> supplier) {
return supplier.get(); // TODO
}
}
-
Indiquer un code pour la classe PermitSync en utilisant le mot clé synchronized.
-
Indiquer un code pour la classe PermitSync en utilisant un verrou du package
java.util.concurrent.
© Université de Marne-la-Vallée