Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

1. domácí úloha: Producent – konzument

V 2. týdnu jste se v rámci přednášky a cvičení dozvěděli více o vláknech, mutexech a podmínkových proměnných. Nyní je na čase si nově nabyté znalosti vyzkoušet v praxi na první domácí úloze. Domácí úkol vychází z problému “Producent – konzument”, se kterým jste byli seznámeni rovněž na hodině.

Stáhněte si následující balíček. Vaším úkolem je implementovat chybějící části kódu v souboru “Threadpool.h” tak, abyste zajistili hladkou součinnost několika souběžně běžících vláken producentů (přidávají úlohy) a konzumentů (vykonávají úlohy), kteří přistupují ke společné frontě. Ve staženém balíčku najdete hlavní soubor “main.cpp”, který spouští celou domácí úlohu a definuje ukázkovou funkci “worker”, kterou mají počítat vlákna konzumentů. V tomto souboru nic upravovat nemusíte (ale můžete, pokud byste chtěli například vyzkoušet různé rychlosti přidávání úloh do fronty a různé počty producentů a konzumentů).

V souboru “Threadpool.h” naleznete ukázku realizace s jedním vláknem konzumenta, který bohužel většinou nestíhá nové úlohy ve frontě zpracovávat dostatečně rychle a úlohy se tak hromadí. Tento nedostatek lze vyřešit, tak, že se úloha bude spouštět s více vlákny konzumentů. Toho lze docílit správnou implementací konstruktoru třídy Threadpool, který spouští daný počet vláken konzumentů. Způsob přidávání úloh do fronty v současné implementaci není v pořádku, pokud by současným způsobem přistupovalo více vláken ke frontě současně, výsledek není deterministický. Mohlo by se stát, že vlákno přidanou úlohu “přepíše” a ta se tak ztratí.

První bod dostanete za to, pokud tyto nedostatky opravíte. Samozřejmě očekáváme, že se zpracují všechny úlohy a to právě jednou. Navíc zpracování by mělo probíhat co nejvíce nezávisle na sobě, abyste dosáhli co nejlepšího času (díky paralelnímu zrychlení).

Druhý bod dostanete, pokud vlákna konzumentů nebudou čekat na přidání nových úloh do fronty pomocí “busy-waitingu”.

Zip archiv obsahující soubor “Threadpool.h” odevzdávejte do systému BRUTE. Termín odevzdání je 4. 3. 23:59 CET pro středeční cvičení a 5. 3. 23:59 CET pro čtvrteční cvičení. Rozhoduje cvičení, na které jste zapsaní v KOSu. Pokud byste měli jakýkoliv problém s vypracováním, neváhejte použít forum.

courses/b4b36pdv/tutorials/hw_01.txt · Last modified: 2021/02/22 12:14 by tomaspe7