10. cvičení - Future object


Úkoly

  1. (Bodovaný) Naprogramujte objekt reprezentující pracovní sílu, které budeme moci zadávat úkol ve formě funkce bez argumentů a dostaneme objekt, ve kterém se někdy objeví vysledek. Naprogramujte třídu labour, která bude mít metody set-worker-count a compute. Metoda set-worker-count pro číslo vytvoří daný počet pracovníků (vláken), kteří budou čekat na vyzvednutí funkce k vypočtení. Metoda compute pak bude brát funkci bez argumentu a vratí objekt future, který má metodu deref, která vrátí vypočtenou hodnotu. Vašim úkolem je zajistit platnost těchto pravidel:

    1. Pracovníci, kteří nemají co dělat, spí.
    2. Metoda compute vrátí future a na nic nečeká, i když všichni pracovníci něco dělaji.
    3. Metoda deref uspí volajícího, pokud hodnota ješte není vypočtena.
    4. Jakmile je vypočtena hodnota pro future, probudí se všichni uspaní na deref a všechny další deref už nemůžou nikoho uspat.