Lista 3.

Programowanie współbieżne, Laboratorium

by Jerry Sky


Zadanie

Zakładamy, że mamy graf nn wierzchołków, w którym krawędzie są nieskierowane. Krawędź między wierzchołkami ii a jj oznaczamy: {i,j}\{i,j\}. Listę sąsiadów wierzchołka ii oznaczamy: N(i)N(i).

Podobnie jak w poprzednich zadaniach zakładamy, że w grafie istnieje ścieżka Hamiltona złożona z krawędzi postaci {v,v+1}\{v, v+1\} (dzięki czemu graf jest spójny), oraz pewna liczba dd dodatkowych krawędzi (skrótów).

Należy zaimplementować wykonywanie protokołu routingu podobnego do znanego protokołu RIP, zgodnie z poniższymi wskazówkami.

Zwróć uwagę, aby Senderi\mathrm{Sender}_i nie blokował dostępu do RiR_i w czasie, gdy rozsyła pakiet z ofertami do sąsiadów oraz tak zmieniał Ri[j].changedR_i[j].\mathrm{changed} na false aby nie „zagłuszyć” żadnej nowej zmiany.

Argumenty

Wszystkie powyższe argumenty powinny być liczbami naturalnymi różnymi od zera.


Go

W celu uruchomienia programu należy wykonać polecenie

go run . ‹n› ‹d› ‹maxSleep›

z uzupełnionymi parameterami będąc w katalogu go.

Nagranie asciinema pokazujące przykładowe uruchomienia programu znajduje się w pliku go.cast.


Ada

W celu uruchomienia programu należy go najpierw skompilować poleceniem

make

a następnie wykonać polecenie

./main.bin ‹n› ‹d› ‹maxSleep›

z uzupełnionymi parameterami będąc w katalogu ada.

Nagranie asciinema pokazujące przykładowe uruchomienia programu znajduje się w pliku ada.cast.

Uwaga: w implementacji w Adzie numeracja węzłów wyrażana jest zakresem 1..n, w przeciwieństwie do Go (0..(n-1)).