Accueil🇫🇷Chercher

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.
  • La mĂ©thode enfiler ajoute une donnĂ©e dans la file et si la file Ă©tait vide avant, alors elle libère une Ă©ventuelle tâche qui attendrait.
  • La mĂ©thode defiler lit une valeur depuis la file. Si aucune donnĂ©e n'est disponible, elle se met en attente.
  • La mĂ©thode vide permet de savoir si la file est vide.

Il est possible de faire les remarques suivantes concernant le fonctionnement de Java par rapport Ă  cet exemple :

  • Les moniteurs en Java n'ont pas un fonctionnement FIFO. Cela signifie que ce n'est pas forcĂ©ment la tâche qui attend depuis le plus longtemps qui sera rĂ©veillĂ©e en premier.
  • Les moniteurs doivent ĂŞtre utilisĂ©s dans des blocs synchronisĂ©s. Le verrou associĂ© Ă  la synchronisation est implicitement rendu lors de la mise en attente et est automatiquement rĂ©cupĂ©rĂ© lorsque la tâche est rĂ©veillĂ©e.

Voir aussi

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.