[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.