Monitory

Z FAV wiki
Přejít na: navigace, hledání

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