Rinnakkaisohjelmointi, LH 6
- Tee Aterioivien filosofien -ongelman ratkaisu suojatuilla objekteilla (protected objects)
- Ratkaise edellisen viikon Yksisuuntainen silta tehtävä monitorilla. 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.)
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.
- Tehtävät 10.2 (ks. Alg. 10.2) ja 10.11 (ks. Alg. 10.3) oppikirjasta.
- [2 htp] Lue artikkeli Real-world Concurrency (Bryan Cantrill, Jeff Bonwick, ACM Queue vol. 6, no. 5 - September 2008, html, local pdf)
ja pohdi seuraavia kysymyksiä artikkelin perusteella.
- Mitä realistisia vaihtoehtoja nykyisten sovellusten nopeuttamiseen on monisäikeisen rinnakkaisohjelmoinnin lisäksi?
- Mikä merkitys kuumilla ja kylmillä koodin suorituspoluilla (hot and cold paths)?
- Miksi luku- ja kirjoituslukkojen käyttö olekaan aina hyvä asia? Mikä on rekursiivinen luku-lukko ja mikä ongelma siihen liittyy?
- Mitä hyötyä on CPU-sidonnaisten lukkojen käytöstä?
- Mitä tarkoittaa käsite prioriteetin perintä (priority inheritance) ja miksi se onnistuu helpommin busy-wait mutex-lukkojen kuin semaforien kanssa?
- Miksi lukkojen järjestys (lock ordering) on tärkeä ja mikä ongelma on sen toteuttamisessa?
Vastaa Nina Aremon lyhyeen (n. 5 min) kyselylomakkeeseen kokeillusta laskuharjoituskäytännöstä. (Huom: lomake on vain suomeksi)
Anna kurssipalaute.
Kohta 11 (Mielipiteesi oppimateriaalista). Anna mielipiteesi BACI-ohjelmiston käytöstä tällä kurssilla. Tukiko BACI oppimistasi? Oliko siihen käytetty aika hyödyllinen? Oliko C-- -kielen käyttö vaikeata?
Kohta 14 (Miten kurssia voisi kehittää?). Anna mielipiteesi kurssin laskuharjoituskäytännöstä. Onko se parempi/huonompi kuin tavanomainen käytäntö, jossa opiskelijat pöytäkunnittain keskustelevat yhden tehtävän ratkaisun ja sitten lopulta esittävät sen vuorollaan kaikille? Tukivatko ne oppimista? Olisiko hyödyllistä käydä pikaisesti tehtävien pääkohdat läpi harjoituksen lopuksi (esim. viimeiset 15 minuuttia)? Jos ryhmässäsi kokeiltiin tällaista menettelyä, niin toimiko se?
Ota mukaan laskuharjoitustilaisuuteen em. kohtien vastauksesi keskustelua varten.
Teemu Kerola 11.12.2009 9:47