- Klasy:
Richman- proces
- Struktury:
s_tunnel- tunels_message- wiadomość
RESTING- stan, w którym proces odpoczywa przed kolejną podróżą.LOOKING_FOR_TUNNEL- stan, w którym proces szuka tunelu.IN_TUNEL- stan, w którym proces przechodzi przez tunel.IN_PARADISE- stan, w którym proces jest w innym wymiarze.
TUNNEL_REQ- wiadomość wysyłana przez proces w celu ubiegania sie o miejsce w tunelu.TUNNEL_ACK- wiadomość jako odpowiedź procesu odbierającegoTUNNEL_REQmowiaca o stanie tunelu.TRIP- wiadomość mówiąca procesom, że przez dany tunel w danym kierunku przechodzi bogacz.TRIP_FINISHED- wiadomość mówiąca procesom, że podróż w danym tunelu się zakończyła.
-
Proces się inicjalizuje i przechodzi w stan
RESTING. -
Proces czeka jakiś okreslony czas, a po nim zbiera ekipę i przechodzi w stan
LOOKING_FOR_TUNNEL. -
Proces wysyła wiadomość
TUNNEL_REQ, aby dostać się do tunelu. -
Jeżeli proces otrzymal
TUNNEL_REQto odpowiadaTUNNEL_ACK:- Jeśli proces jest wewnątrz tunelu to odpowiada ID, kierunkiem i pojemnością tunelu,
- Jeśli proces również szuka tunelu i ma większy priorytet to wstrzymuje zapytanie,
- W kazdym innym wypadku proces wysyła id tunelu -1
-
Proces wysyłający
TUNNEL_REQmusi zebrać wiadomości od wszystkich innych procesów, żeby mógł zacząć wybierać tunel. -
Proces iteruje się po tunelach i na podstawie informacji z wiadomości
TUNNEL_ACKokreśla, do którego tunelu może wejść:- Jeśli jest tunel, który jest wolny lub idzie w tym samym kierunku i ma wystarczającą pojemność to wchodzi do tunelu.
- W momencie zajęcia miejsca proces zmienia stan na
IN_TUNNELi wysyła wiadomośćTRIPoraz odpowiada na zaległe wstrzymaneTUNNEL_REQ. - Jeśli nie uda się zająć miejsca w żadnym z tuneli to proces czeka na wiadomość typu
TRIP_FINISHED
-
Proces wyznacza losowy czas, który określa jak długo będzie przechodził przez tunel.
-
Po wyznaczonym kwancie czasu wysyła
TRIP_FINISHEDi zmienia stan naIN_PARADISE. -
Proces po pobycie w raju wyzancza jakiś czas, po którym zmienia stan na
LOOKING_FOR_TUNNEL. -
Kroki od 5 do 8 w drugą stronę (kierunek tunelu przeciwny).
-
Proces po upłynięciu czasu kończy podróż i resetuje się przechodząc w stan
RESTING.