Kornaś BIS - odzież robocza, myśliwska...

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.
Copyright 2006 (c) paak.net