|
|
| Řádka 1: |
Řádka 1: |
| − | 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
| + | RONALDO JE GAY!!!!!!!!!!!!!!!!!!!! |
| − | 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.
| + | |
| − | | + | |
| − | | + | |
| − | * Monitor je speciální typ modulu, ve kterém jsou sdružena data a procedury, které s nimi mohou manipulovat
| + | |
| − | * Monitory musí umět rozpoznat překladač a přeložit je do odpovídajícího kódu
| + | |
| − | * Procesy mohou volat procedury monitoru, ale nemohou přímo přistupovat k datům monitoru
| + | |
| − | * V monitoru může být v jednu chvíli AKTIVNÍ pouze jeden proces; ostatní jsou při pokusu o vstup do monitoru pozastaveny.
| + | |
| − | * Monitory poskytují speciální typ proměnné nazývané podmínka
| + | |
| − | * Podmínky mohou být definovány a použity pouze uvnitř monitoru
| + | |
| − | * Nad podmínkami jsou definovány dvě operace:
| + | |
| − | ** c.wait - volající bude pozastaven nad podmínkou c. Pokud je některý proces připraven vstoupit do monitoru, bude mu to dovoleno
| + | |
| − | ** c.signal - pokud existuje jeden nebo více procesů pozastavených nad podmínkou c, reaktivuje jeden z pozastavených procesů, tj. bude mu dovoleno pokračovat v běhu uvnitř monitoru pokud nad podmínkou nespí žádný proces, nedělá nic
| + | |
| − | | + | |
| − | Pozor, pokud by signál pouze vzbudil proces, běžely by v monitoru dva.
| + | |
| − | Možná řešení:
| + | |
| − | * Hoare - proces volající c.signal se pozastaví a vzbudí se až poté co předchozí rektivovaný proces opustí monitor nebo se pozastaví
| + | |
| − | * Hansen - Signal smí být uveden pouze jako poslední příkaz v monitoru. Po volání signal musí proces opustit 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.
| + | |
| − | | + | |
| − | {{fav-kiv-bzinf}}
| + | |
| − | | + | |
| − | | + | |
| − | [[Kategorie:fav-kiv-bzinf]]
| + | |