Monitory

Z FAV wiki
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(Zrušena verze 442 od uživatele 77.48.236.1 (diskuse))
(doplnění ukázkového kódu)
 
Řádka 21: Řádka 21:
  
 
V Javě jsou monitory implementovány pomocí klíčového slova synchronized. Zde je problém více vláken v monitoru vyřešen tak, že čekající může běžet až poté, co proces volající signál opustí monitor.
 
V Javě jsou monitory implementovány pomocí klíčového slova synchronized. Zde je problém více vláken v monitoru vyřešen tak, že čekající může běžet až poté, co proces volající signál opustí monitor.
 +
 +
 +
== Monitor - závozník ==
 +
<pre>
 +
//stav skladu
 +
int pivo = 10;
 +
int vino = 100;
 +
cond c1, c2; //podmínkové proměnné
 +
 +
getPivo(){
 +
  while(pivo < 1){
 +
    wait(c1);
 +
  }
 +
  pivo--;
 +
}
 +
 +
zavozPiva(){
 +
  pivo++;
 +
  signal(c1);
 +
}
 +
 +
zavozPiva(pocet){
 +
  pivo = pivo + pocet;
 +
  broadcast(c1); //vzdudí všechny čekající na pivo
 +
}
 +
 +
getVino(){
 +
  ...analogicky..
 +
}
 +
zavozVina(){
 +
  ...analogicky..
 +
}
 +
zavozVina(pocet){
 +
  ...analogicky..
 +
}
 +
</pre>
 +
Je-li počet čekajících na pivo větší než počet zavezených piv, tak se jen vzbudí a znovu uspí => neefektivní!
 +
 +
Implementace monitoru v programovacím jazyce C je realizována pomocí MUTEXu + podmínkových proměnných.
  
 
{{fav-kiv-bzinf}}
 
{{fav-kiv-bzinf}}

Aktuální verze z 10. 6. 2014, 09:32

Monitor je synchronizační primitivum, které se používá pro řizeni přístupu ke sdíleným prostředkům. Jeho zvláštností je, že jde o speciální konstrukci programovacího jazyka (musí ho tedy implementovat překladač), typicky implementovanou pomocí jineho synchronizačního primitiva. Výhodou monitoru oproti jiným primitivum je jeho vysokoúrovňovost - snadněji se používá a je bezpečnější. Při jeho použití je méně pravděpodobné, že programátor udělá chybu.


Pozor, pokud by signál pouze vzbudil proces, běžely by v monitoru dva. Možná řešení:

V Javě jsou monitory implementovány pomocí klíčového slova synchronized. Zde je problém více vláken v monitoru vyřešen tak, že čekající může běžet až poté, co proces volající signál opustí monitor.


[editovat] Monitor - závozník

//stav skladu
int pivo = 10;
int vino = 100;
cond c1, c2; //podmínkové proměnné

getPivo(){
  while(pivo < 1){
    wait(c1);
  }
  pivo--;
}

zavozPiva(){
  pivo++;
  signal(c1);
}

zavozPiva(pocet){
  pivo = pivo + pocet;
  broadcast(c1); //vzdudí všechny čekající na pivo
}

getVino(){
  ...analogicky..
}
zavozVina(){
  ...analogicky..
}
zavozVina(pocet){
  ...analogicky..
}

Je-li počet čekajících na pivo větší než počet zavezených piv, tak se jen vzbudí a znovu uspí => neefektivní!

Implementace monitoru v programovacím jazyce C je realizována pomocí MUTEXu + podmínkových proměnných.


Osobní nástroje
Jmenné prostory
Varianty
Akce
Navigace
Nástroje