581332-8 Rinnakkaisohjelmistot Erilliskuulustelu 27.9.2005 Kirjoita jokaiseen vastauspaperiisi nimikirjoituksesi ja nimen selvennys sekä kokeen nimi että päivämäärä. Vastausohjeita:
Komponenttien kommunikointi sanomanvälitystä käyttäen [15 p]
Hajautetun sovelluksen komponentit toimivat eri koneissa kaukana toisistaan, solmujen väliset
yhteydet ovat hitaita ja saattavat joskus olla poikki. Sovelluksen komponentit kommunikoivat
sanomanvälitystä käyttäen. Heikkolaatuisista yhteyksistä huolimatta sovelluksen toiminta
edellyttää luotettavaa monilähetystä eli sitä, että sanoma välitetään joko kaikille ryhmä
jäsenille tai sitten ei kenellekään.
monitor Vastaanotto { cond sisään; cond ulos; cond tutki; boolean varattu = false; procedure Tulevastaanotolle ( ) { # potilaan koodi if (varattu) wait(sisään); # odota sisäänkutsua varattu = true; # merkitse varatuksi mene tutkimushuoneeseen signal(tutki); # ilmoita lääkärille ole tutkittavana wait(ulos); # jää odottamaan poistumismerkkiä poistu tutkimushuoneesta } procedure Tutkipotilas ( ) { # lääkärin koodi signal(sisään); # kutsu potilas sisään wait(tutki); # odotetaan potilasta tutki potilas signal(ulos); # anna poistumissignaali varattu =false; # vapauta tutkimushuone } } process Potilas( )[i = 1 to n] { while (true) { tee mitä ikinä teet tuntuu sairaalta call Vastaanotto.Tulevastaanotolle ( ); } } process Lääkäri( ) { while (true) call Vastaanotto.Tutkipotilas( ); }