Rinnakkaisohjelmointi, LH 5
- Tehtävä 6.6 oppikirjasta.
- [2 htp] Yksisuuntainen silta semaforeilla. Kahden kylän A ja B välissä olevan joen yli kulkee niin kapea silta, että autot voivat ajaa sitä
pitkin vain yhteen suuntaan (itään tai länteen) kerrallaan. Kun sillalla kulkee autoja A:sta B:hen, niin B:stä A:han
haluavien täytyy odottaa. Jotta varmistetaan, että autot menevät sillalle vain kulloinkin sallitusta
suunnasta, siltaa käyttävät autoprosessit kutsuvat proseduuria aja_sillalle(suunta) pyrkiessään
sillalle ja sillalta poistuessaan proseduuria poistu_sillalta(suunta).
Process auto[i = 1 to N] { ..... aja_sillalle(suunta); -- aja_sillalle_itään() tai aja_sillalle_länteen() ylitä silta poistu_sillalta(suunta); -- poistu_sillalta_itään() tai poistu_sillalta_länteen() ...... }
Tee semaforeja ja P- ja V-operaatioita (wait ja signal) käyttävät koodit proseduureille aja_sillalle(suunta) ja poistu_sillalta(suunta). Ratkaisun ei tarvitse olla reilu, vaan autojen odotusajat saavat olla pitkiä. Kuitenkin samalta suunnalta tulevien autojen tulee päästä sillalle saapumisjärjestyksessä. Jos haluat, voi kokeilla algoritmejasi BACIssa, sijoittamalla ne silta-simulaattorin ratkaisurunkoon. (Tarkkaile simulointiaikana yhteisten muuttujien west_bound ja east_bound arvoja ja katso, että animoidulla "sillalla" on sopivasti autoja. Virittele parametreja sopivasti tarvittaessa. Jos sinulla on liikaa aikaa, voit virittää animointia fiksummaksi - ks. jBACI Concurrency Simulator User Guide)
Toimiihan algoritmisi oikein ainakin seuraavissa eritystapauksissa:- Ensimmäinen auto tulee yksin suuntaan A tai B.
- Sillalla 5 autoa suuntaan A ja paikalle tulee uusi auto suuntaan A tai B.
- Sillalla on 4 autoa suuntaan A, uusi auto tulee suuntaan B ja sitten heti perään toinen uusi auto tulee suuntaan A.
- Sillalla on autoja, jotka poistuvat jättäen sillan tyhjäksi. Toiseen suuntaa oli odottamassa autoja.
- Sillalla on autoja, jotka poistuvat jättäen sillan tyhjäksi. Uusi auto tulee suuntaan A tai suuntaan B.
- Muokkaa vastaustasi tilanteeseen, jossa sillan painorajoituksen vuoksi sille mahtuu kerrallaan vain 3 autoa.
- Tee laskuharjoitusten 4 tehtävä 1 (PlusMinus BACI ohjelma) uudelleen siten, että prosessien synkronointiin käytetään monitoria.
- Tee ohjelmasta versio, jossa kriittisen vaiheen suojaus ei toimi. Miten tämä ilmenee?
- Tee ohjelmasta versio, jossa kriittisen vaiheen suojaus toimii oikein. Miten tiedät, että ohjelmasi toimii oikein? Perustele.
- Miten ohjelmasi muuttuisi, jos laskentaprosesseja olisikin 4 tai 10 kappaletta?
Huom: sinun ei tarvitse muokata BACI-toteutusta 4 tai 10 laskentaprosessille, vaikka toki saat sen halutessasi tehdä. - Olisiko hyödyllistä käyttää 10 laskentaprosessia? Miksi?
Mikä olisi suurin hyödyllinen laskentaprosessien määrä? Miksi?
- Tarkastellaan kirjan algoritmia 7.3 (s. 152). Huomaa typo algoritmissa.
- Mitä merkittäviä eroja algoritmilla 7.3 on luennolla esitetystä usean tuottaja/kuluttajan semaforipohjaisesta ratkaisusta (luento 6, kalvo 16; Andrews, Fig 4.5)? Kumpi on parempi/huonompi ja miksi?
- Mikä tarkoittaa käsite monitorin signalointisemantiikka?
- Algoritmi 7.3 perustuu IRR signalointisemantiikan. Anna skenaario, jossa algoritmi toimii väärin, jos signalointisemantiikkana olisi E=S=W.
- Kuinka algoritmia 7.3 tulee muuttaa, jos monitorin signalointisemantiikkana on E=S=W?
Teemu Kerola 24.10.2008 9:38