Lista 2.

Programowanie współbieżne, Laboratorium

by Jerry Sky

2021-05-02


Zadanie 1.

Rozszerz system zaimplementowany w zadaniu z poprzedniej listy w taki sposób, aby można w nim dodać bb krawędzi skierowanych postaci (i,j)(i,j), gdzie i>ji>j, oraz ustalić parametr hh, oznaczający czas życia pakietu rozumiany jako największa liczba jego transferów od wierzchołka do wierzchołka. W grafie mogą występować cykle, więc jeśli pakiet w h krokach nie dotrze do celu, to drukowany jest komunikat o jego śmierci i znika z systemu. Program ma być uruchamiany z parametrami: n,d,b,k,hn, d, b, k, h, gdzie parametry n,d,kn, d, k oznaczają to samo co w zadaniu z poprzedniej listy, a parametry b,hb, h mają takie znaczenie, jak opisano wyżej.


Zadanie 2.

Dodaj wątek kłusownika, który co pewien czas budzi się, kontaktuje się z wątkiem losowo wybranego wierzchołka i umieszcza w nim pułapkę na jeden pakiet. Jeśli pakiet dotrze do wierzchołka z zastawioną pułapką, to drukowany jest komunikat, że wpadł on w pułapkę i pakiet znika z systemu wraz z pułapką, w którą wpadł.

(Wskazówka: w wątku wierzchołka zastosuj konstrukcję select, aby mógł on obsługiwać zarówno zastawienie pułapki kłusownika, jak i odbieranie pakietów.)


Rozwiązanie

Go

Pliki Źródłowe znajdują się w katalogu go.

Żeby uruchomić program, należy wykonać polecenie

go run . ‹n› ‹d› ‹b› ‹k› ‹h› ‹maxSleep› [‹plundererIntervals›]

z uzupełnionymi parametrami.

Nagranie asciinema znajduje się w pliku go.cast.


Ada

Pliki źródłowe znajdują się w katalogu ada.

Przed uruchomieniem programu należy go skompilować poleceniem

make

Teraz można uruchomić program poleceniem

./main.bin ‹n› ‹d› ‹b› ‹k› ‹h› ‹maxSleep› [‹plundererIntervals›]

z uzupełnionymi parametrami.

Nagranie asciinema znajduje się w pliku ada.cast.


Parametry

Parametr maxSleep określa liczbę, przez jaką należy podzielić domyślny czas oczekiwania wątków (jedna sekunda). Przykładowo, jeśli maxSleep = 100 oznacza to, że maksymalny czas oczekiwania wynosi 1/100 sekundy, czyli 10 milisekund.

Parametr opcjonalny plundererIntervals określa mnożnik okresu oczekiwania określonego przez parametr maxSleep. Jeśli parametr ten nie zostanie podany, kłusownik nie zostanie aktywowany.
W celu jego aktywacji należy podać liczbę dodatnią, np. 1. Wówczas kłusownik ma taki sam czas oczekiwania jak każdy wątek węzła w grafie. Czas oczekiwania można zwiększyć, podając większą liczbę.