See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Moniteur (informatique) - Wikipédia

Moniteur (informatique)

Un article de Wikipédia, l'encyclopédie libre.

Pour les articles homonymes, voir moniteur.

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).

[modifier] 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.

[modifier] Exemples d'utilisation des moniteurs en Java

Soit 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 synchronized void enfiler(Object o) {
      l.add(o);
      if(l.size()==1) {
         try {
            this.notify();
         } catch (Exception e) {}
      }
   }
   public synchronized Object defiler() {
      if(l.size()==0) {
         try {
            this.wait();
         } catch (Exception 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.

[modifier] Voir aussi

Problèmes classiques des
méthodes de synchronisation

Couplage fort - Famine

Interblocage - Inversion de priorité

Les méthodes de synchronisation

Barrière de synchronisation - Futex - Moniteur

Mutex - Sémaphore - Spinlock



aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -