5. cvičenie – Problém fajčiarov, problém divochov 🚬

Problém fajčiarov

Podľa prednášky implementujte riešenie problému fajčiarov.

Problém divochov

Podľa prednášky implementujte riešenie problému hodujúcich divochov.

Modifikácia problému divochov #1

Zadanie

Vypracujte program, ktorý rieši modifikovaný synchronizačný problém hodujúcich divochov (Dining Savages).

Divosi vždy ZAČÍNAJÚ večerať všetci spolu. Keď sa všetci zídu, začnú si postupne naberať z hrnca (a pripadne budiť kuchára). Porcie do hrnca vkladá kuchár, nie divoch!

Vhodne modelujte daný problém podľa nasledovných požiadaviek:

  1. zistite, o akú kombináciu synchronizačných problémov sa jedná,
  2. napíšte pseudokód riešenia,
  3. umiestnite vhodné výpisy na overenie funkčnosti modelu,
  4. zvoľte vhodne charakteristiky, na ktorých sa model zakladá (počty vlákien, časovania aktivít, hodnoty ďalších premenných)

Pomôcky

Pre overenie modelu použite nasledovné výpisy:

  1. Keď divoch prichádza na večeru: "divoch %2d: prisiel som na veceru, uz nas je %2d"
  2. Vypíše len jeden divoch, keď sa všetci zhromaždili: "divoch %2d: uz sme vsetci, zaciname vecerat"
  3. Pred zisťovanie počtu porcii pôjde nasledovný výpis: "divoch %2d: pocet zostavajucich porcii v hrnci je %2d"
  4. Divoch, ktorý zistí, že je hrniec prázdny, vypíše: "divoch %2d: budim kuchara"
  5. Každý divoch, keď si berie porciu, dá o tom vedieť: "divoch %2d: beriem si porciu"
  6. Každý divoch oznamuje, keď porciu konzumuje: "divoch %2d: hodujem"
  7. Počas varenia kuchár vypíše: "kuchar: varim"

Štandardné riešenie treba rozšíriť o bariéru, aby sa pred každým hodovaním najprv zišli všetci divosi, až potom môže začať hostina.

Pseudokód riešenia

Riešenie

Modifikácia problému divochov #2

Zadanie

Vypracujte program, ktorý rieši modifikovaný synchronizačný problém hodujúcich divochov (Dinning Savages).

V kmeni je viacero kuchárov. Keď divoch zistí, že je hrniec prázdny, zobudí VŠETKÝCH kuchárov, ktorí môžu pri varení navzájom pomáhať a spoločne variť. PRÁVE JEDEN kuchár oznámi čakajúcemu divochovi, že je dovarené. Porcie do hrnca vkladá kuchár, nie divoch!

Vhodne modelujte daný problém podľa nasledovných požiadaviek:

  1. zistite, o akú kombináciu synchronizačných problémov sa jedná,
  2. napíšte pseudokód riešenia,
  3. umiestnite vhodné výpisy na overenie funkčnosti modelu,
  4. zvoľte vhodne charakteristiky, na ktorých sa model zakladá (počty vlákien, časovania aktivít, hodnoty ďalších premenných)

Riešenie

Ponechávame ako úlohu na precvičenie.