Skip to content
Snippets Groups Projects
Commit 7b3c8ea7 authored by Michal Sojka's avatar Michal Sojka
Browse files

Merge branch 'factory-update' into 'master'

lab6: Úprava zadání pro letošní rok

See merge request !38
parents b2423b9c 430d06b7
No related branches found
No related tags found
1 merge request!38lab6: Úprava zadání pro letošní rok
Pipeline #76902 passed
......@@ -47,7 +47,7 @@ parametru (např. neexistující pracoviště), nebo špatného počtu
parametrů, ignorujte celý řádek. Doporučujeme informovat o tom
uživatele výpisem do standardního chybového výstupu.
Celý proces je řízen dělníky. Každý dělník bude reprezentován samostatným
Výrobní proces je řízen dělníky. Každý dělník bude reprezentován samostatným
vláknem, které bude vytvořeno při příchodu dělníka a ukončeno při jeho odchodu.
Dělník potřebuje ke své práci polotovar (meziprodukt) a volné pracoviště pro
které je specializován. Pokud nebude mít jedno nebo druhé, čeká. Pro první
......@@ -93,7 +93,11 @@ operace.
Dělník odchází z pracoviště buď při ukončování celé aplikace (viz níže) nebo
jako reakce na příkaz `end`. Dělník který má odejít nejdříve dokončí aktuálně
rozdělanou práci. Pokud má dělník odejít na základě příkazu `end`, nesmí vzít
novou práci. Při odchodu dělníka ukončete jeho vlákno.
novou práci. Při odchodu dělník vypíše na standardní výstup:
<jméno> goes home
a poté ukončí své vlákno.
Pokud může dělník v danou chvíli pracovat na více různých místech, vybírá si
místo s nejvyšším možným krokem tak, aby se prioritně zpracovávaly zakázky
......@@ -101,11 +105,24 @@ nejblíže dokončení. Je-li takových víc, vybírá mezi nimi výrobek blíž
abecedy, tedy např. výrobek `A` před `B`.
Uzavření standardního vstupu (tzn. Váš program načte `EOF` ze `stdin`) je
požadavkem na ukončení celé aplikace, přičemž vlastní ukončení aplikace a
odchod dělníků neukončených příkazem `end` nastane až v okamžiku, kdy žádný dělník
nemůže pracovat (dělníci čekají a pokud se objeví práce začnou ještě pracovat).
požadavkem na ukončení celé aplikace. Po tomto požadavku dělník odchází v
okamžiku, kdy na žádném výrobku, na kterém může pracovat jeho profese, není
možné vykonat nějakou práci (kvůli chybějícím pracovníkům, pracovním místům či
meziproduktům). Do té doby čeká a pokud se objeví práce začne ještě pracovat.
Ukončení aplikace nastane po odchodu všech dělníků.
{{< hint info >}}
**Příklad ukončování aplikace:** Nechť jsou při příjmu `EOF` rozpracovány
pouze výrobky `B` a `C`. Okamžitě tedy odchází ohýbači a svářeči, ostatní
čekají či pracují. Pokud bude jako první dokončen výrobek `B`, nebo na `B`
nebude možné dále pracovat, odejdou střihači (nůžky). Všichni ostatní
odcházejí až po dokončení prací na výrobku `C`.
{{< /hint >}}
Před definitivním koncem aplikace ukončete vlákna všech dělníků a dealokujte
alokovanou paměť. Návratový kód aplikace bude `0`.
dynamicky alokovanou paměť. Návratový kód aplikace bude `0`.
## Pokyny k implementaci
- Čekání všech vláken musí být efektivní, nesmí být vytěžován procesor (busy waiting).
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment