<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://512.cz/skins/common/feed.css?301"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="cs">
		<id>https://512.cz/index.php?feed=atom&amp;target=Tonda13&amp;title=Speci%C3%A1ln%C3%AD%3AP%C5%99%C3%ADsp%C4%9Bvky%2FTonda13</id>
		<title>FAV wiki - Příspěvky uživatele [cs]</title>
		<link rel="self" type="application/atom+xml" href="https://512.cz/index.php?feed=atom&amp;target=Tonda13&amp;title=Speci%C3%A1ln%C3%AD%3AP%C5%99%C3%ADsp%C4%9Bvky%2FTonda13"/>
		<link rel="alternate" type="text/html" href="https://512.cz/index.php?title=Speci%C3%A1ln%C3%AD:P%C5%99%C3%ADsp%C4%9Bvky/Tonda13"/>
		<updated>2026-10-20T08:46:17Z</updated>
		<subtitle>Z FAV wiki</subtitle>
		<generator>MediaWiki 1.17.0</generator>

	<entry>
		<id>https://512.cz/index.php?title=Monitory</id>
		<title>Monitory</title>
		<link rel="alternate" type="text/html" href="https://512.cz/index.php?title=Monitory"/>
				<updated>2014-06-10T09:32:01Z</updated>
		
		<summary type="html">&lt;p&gt;Tonda13: doplnění ukázkového kódu&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Monitor je synchronizační primitivum, které se používá pro řizeni přístupu ke sdíleným prostředkům. Jeho zvláštností&lt;br /&gt;
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&lt;br /&gt;
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&lt;br /&gt;
udělá chybu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Monitor je speciální typ modulu, ve kterém jsou sdružena data a procedury, které s nimi mohou manipulovat&lt;br /&gt;
* Monitory musí umět rozpoznat překladač a přeložit je do odpovídajícího kódu&lt;br /&gt;
* Procesy mohou volat procedury monitoru, ale nemohou přímo přistupovat k datům monitoru&lt;br /&gt;
* V monitoru může být v jednu chvíli AKTIVNÍ pouze jeden proces; ostatní jsou při pokusu o vstup do monitoru pozastaveny.&lt;br /&gt;
* Monitory poskytují speciální typ proměnné nazývané podmínka&lt;br /&gt;
* Podmínky mohou být definovány a použity pouze uvnitř monitoru&lt;br /&gt;
* Nad podmínkami jsou definovány dvě operace:&lt;br /&gt;
** c.wait - volající bude pozastaven nad podmínkou c. Pokud je některý proces připraven vstoupit do monitoru, bude mu to dovoleno&lt;br /&gt;
** 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&lt;br /&gt;
&lt;br /&gt;
Pozor, pokud by signál pouze vzbudil proces, běžely by v monitoru dva.&lt;br /&gt;
Možná řešení:&lt;br /&gt;
* Hoare - proces volající c.signal se pozastaví a vzbudí se až poté co předchozí rektivovaný proces opustí monitor nebo se pozastaví&lt;br /&gt;
* Hansen - Signal smí být uveden pouze jako poslední příkaz v monitoru. Po volání signal musí proces opustit monitor&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Monitor - závozník ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//stav skladu&lt;br /&gt;
int pivo = 10;&lt;br /&gt;
int vino = 100;&lt;br /&gt;
cond c1, c2; //podmínkové proměnné&lt;br /&gt;
&lt;br /&gt;
getPivo(){&lt;br /&gt;
  while(pivo &amp;lt; 1){&lt;br /&gt;
    wait(c1);&lt;br /&gt;
  }&lt;br /&gt;
  pivo--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
zavozPiva(){&lt;br /&gt;
  pivo++;&lt;br /&gt;
  signal(c1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
zavozPiva(pocet){&lt;br /&gt;
  pivo = pivo + pocet;&lt;br /&gt;
  broadcast(c1); //vzdudí všechny čekající na pivo&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getVino(){&lt;br /&gt;
  ...analogicky..&lt;br /&gt;
}&lt;br /&gt;
zavozVina(){&lt;br /&gt;
  ...analogicky..&lt;br /&gt;
}&lt;br /&gt;
zavozVina(pocet){&lt;br /&gt;
  ...analogicky..&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Je-li počet čekajících na pivo větší než počet zavezených piv, tak se jen vzbudí a znovu uspí =&amp;gt; neefektivní!&lt;br /&gt;
&lt;br /&gt;
Implementace monitoru v programovacím jazyce C je realizována pomocí MUTEXu + podmínkových proměnných.&lt;br /&gt;
&lt;br /&gt;
{{fav-kiv-bzinf}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:fav-kiv-bzinf]]&lt;/div&gt;</summary>
		<author><name>Tonda13</name></author>	</entry>

	<entry>
		<id>https://512.cz/index.php?title=Soubor:Stavy-procesu.jpg</id>
		<title>Soubor:Stavy-procesu.jpg</title>
		<link rel="alternate" type="text/html" href="https://512.cz/index.php?title=Soubor:Stavy-procesu.jpg"/>
				<updated>2014-06-10T09:18:15Z</updated>
		
		<summary type="html">&lt;p&gt;Tonda13: načtena nová verze &amp;amp;quot;Soubor:Stavy-procesu.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Tonda13</name></author>	</entry>

	</feed>