Monika Dekster

Laboratorium 9: Wątki

Zadanie: Sumy cząstkowe

  1. Napisz program, który oblicza kwadrat długości wektora $v$ (czyli sumę kwadratów jego współrzędnych) \[ S = \sum \limits _{i = 0}^{n-1} v_i^2 \] Liczba współrzędnych wektora, $n$, jest bardzo duża ($n \gt 1000000$), dlatego w celu przyspieszenia obliczeń wektor dzielimy na $k$ części (można założyć, że $n$ jest podzielne przez $k$). Każdy z $k$ wątków programu (elementów typu Runnable) oblicza sumę dla odpowiadającej mu części wektora (o długości $n / k$). Wyniki częściowe zwrócone przez wątki są następnie sumowane i całkowita suma wypisana na standardowe wyjście. Program powinien również wypisać sumy wyznaczone przez poszczególne wątki.

    Wartości współrzędnych wektora są generowane losowo z przedziału $(-5,\, 5)$.

  2. Napisz program tworzący N wątków. Wartość N jest podana w linii komend (wartością domyślną N jest 2). Każdy wątek 5 razy generuje liczbę losową, K, z przedziału [100, 1000) i wypisuje na ekran swoją nazwę oraz wartość K. Po wypisaniu tego komunikatu wątek zasypia na K milisekund. Każdy wątek dodatkowo sumuje wygenerowane wartości K. Po wypisaniu wszystkich komunikatów wątek wypisuje komunikat końcowy, zawierający nazwę i sumę wygenerowanych liczb. Po zakończeniu wszystkich wątków program główny wypisuje tekst "Testcase completed" oraz sumę cząstkowych wartości przekazanych przez wątki.

    Przykładowy wynik działania programu:

    Thread-0: 709
    Thread-1: 287
    Thread-1: 296
    Thread-1: 431
    Thread-0: 927
    Thread-1: 550
    Thread-1: 551
    Thread-0: 200
    Thread-0: 381
    Thread-1: ended with sum 2115
    Thread-0: 506
    Thread-0: ended with sum 2723
    Testcase completed, the sum is 4838