- 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_REQ
mowiaca 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_REQ
to 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_REQ
musi 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_ACK
okreś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_TUNNEL
i wysyła wiadomośćTRIP
oraz 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_FINISHED
i 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
.