Programowanie współbieżne, Laboratorium
2021-05-02
Rozszerz system zaimplementowany w zadaniu z poprzedniej listy w taki sposób, aby można w nim dodać krawędzi skierowanych postaci , gdzie , oraz ustalić parametr , 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: , gdzie parametry oznaczają to samo co w zadaniu z poprzedniej listy, a parametry mają takie znaczenie, jak opisano wyżej.
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.)
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
.
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
.
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ę.