Moniteur (programmation)
Un moniteur est une approche pour synchroniser deux ou plusieurs tâches qui utilisent des ressources partagées, habituellement des appareils séparés (imprimantes) ou des ensembles de variables.
Autrefois, les systèmes d'exploitation se réduisaient à un simple programme moniteur enchainant l'exécution des autres (par exemple le DOS de l'IBM 360 à la fin des années 1960). Ce sens est aujourd'hui inusité et n'a rien à voir avec le sens actuel (synchronisation).
Exclusion mutuelle
Un moniteur est constitué de :
- un ensemble de procédures permettant l'interaction avec la ressource partagée ;
- un verrou d'exclusion mutuelle ;
- des variables associées à la ressource ;
- un moniteur non variable qui définit les prétentions nécessaires à l'obtention des conditions.
Exemples d'utilisation des moniteurs en Java
Soient deux thread qui souhaitent communiquer entre eux. Le premier thread envoie des messages au deuxième thread par l'intermédiaire d'une file. Si la file est vide, alors le deuxième thread doit se mettre en attente d'un nouveau message. Une telle file peut être implémentée à l'aide du code suivant :
import java.util.*;
public class EchangeMessage {
private ArrayList l = new ArrayList();
public void enfiler(Object o) {
l.add(o);
if(l.size()==1) {
try {
this.notify();
} catch (IllegalMonitorStateException e) {}
}
}
public Object defiler() {
if(l.size()==0) {
try {
this.wait();
} catch (InterruptedException e){}
}
Object o = l.get(0);
l.remove(0);
return o;
}
public synchronized boolean vide() {
return l.isEmpty();
}
}
|
Cette classe utilise trois méthodes.
Il est possible de faire les remarques suivantes concernant le fonctionnement de Java par rapport Ă cet exemple :
|