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 výpisy podľa nasledovnej špecifikácie formátu:

  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"

O aké synchronizačné úlohy sa jedná?

Ide o úlohu Hodujúcich divochov, ktorá je založená na myšlienke Producentov a konzumentov, rozšírená o sledovanie stavu „skladu“ (koľko porcií sa nachádza v hrnci).

Štandardné riešenie Hodujúcich divochov však treba rozšíriť ešte o bariéru, aby sa pred každým hodovaním najprv zišli všetci divosi, až potom môže začať každodenná večerná 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í si 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.