Programowanie współbieżne - Lista 1
Programowanie współbieżne - Lista 1
Zadanie 1
Zapoznać się z programem prod-kons.c . Następnie
- Napisać wersję sekwencyjną która wykonuje to samo obliczenie. Porównać
szybkość.
- Przerobić program, tak by mieć kilku producentów i konsumentów.
Producenci mają wytwarzać liczby z rozłącznych przedziałów, konsumenci
sumować co im się uda zdobyć. Porównać wyniki konsumentów.
- Przerobić program, tak by producent wypełniał tablicę liczbami losowymi
(użyć srandom by zapewnić sobie powtarzalność wyników)
zaś konsument sumował sinusy tych liczb.
- Napisać sekwencyjną wersję przerobionego programu. Porównać szybkość
wersji równoległej z sekwencyjną, jak szybkość zależy od
rozmiaru tabeli?
Zadanie 2
Napisać program w którym różne wątki niezależnie sumują kwadraty liczb
z różnych przedziałów a następnie w sekcji krytycznej dodają sumy częściowe
do sumy ogólnej.
Zadanie 3
Zasymulować przekazywanie sterowania między wątkami używając semaforów:
każdy wątek dostaje swój semafor (na starcie zamknięty). Następnie
"przekazujemy sterowanie" do danego wątku otwierając jego semafor. Gdy
wątek chce dalej przekazać sterowanie zamyka on swój semafor a otwiera
semafor wątku któremu "przekazuje sterowanie". Użyć to w programie gdzie
wątek główny przygotowyje napis (i umieszcza jego adres w zmiennej globalnej),
"wywołany" wątek oblicza długość napisu a na końcu wątek główny wypisuje
wynik.
Zadanie 4
Co się stanie z programami z zadań 1 i 2 jeśli usuniemy z nich obsługę
semaforów (mutex-ów) tzn. wywołania pthread_mutex_lock i pthread_mutex_unlock.