|
Menu item numer 1
|
ss srfeere er er e
|
erererere zdfxgs a za d
|
|
|
|
|
Opis zadania
Dane jest N procesów, każdy z nich posiada koszyk. K sposród nich posiada ziemniaka,
którego pragnie się pozbyć. Proces posiadający ziemniak wybiera więc pusty koszyk i stara
się wrzucić do niego ziemniak. Sytuacja, gdy ziemniak jest wrzucany do koszyka, który w
międzyczasie się zapełnił jest niedopuszczalna. Zakładamy, że N > K.
2. Opis rozwiązania
W naszym algorytmie wykorzystaliśmy następujące typy wiadomości:
a) SEND_REQ – mam pyrczoka i chce się go pozbyć (broadcast);
b) RECV_PYR – jestem wolny, możesz przesłać;
c) SEND_PYR – przesyłam pyrczoka;
d) PYR_SENDED – pozbyłem się pyrczoka (broadcast);
Na początku proces master tworzy odpowiednią ilość procesów (koszyków) i przydziela
im ustaloną liczbę pyrczoków.
Proces, który ma pyrczoka wysyła do wszystkich pozostałych wiadomość typu
SEND_REQ i czeka na odpowiedź. Jeśli otrzyma wiadomość typu RECV_PYR wysyła do
nadawcy wiadomość SEND_PYR – pozbywa się pyrczoka i ogłasza to wszystkim
pozostałym proces wysyłając broadcast PYR_SENDED.
Każdy proces, który otrzyma wiadomość typu SEND_REQ wpisuje unikalny identyfikator
nadawcy (task id) do swojej lokalnej tablicy. Jeśli proces ten nie ma pyrczoka, to wysyła
wiadomość typu RECV_PYR do pierwszego w tablicy procesu, informując go że może
odebrać pyrczoka. Jeśli dany proces już przesłał swojego pyrczoka w inne miejsce, to
wysyła RECV_PYR do kolejnego w tablicy, itd.
|
|