Teoria
współbieżności
Laboratorium 6
Ćwiczenie - badanie efektywności
Problem czytelników i pisarzy
Problem czytelników i
pisarzy proszę rozwiązać przy pomocy: semaforów i zmiennych
warunkowych Proszę wykonać pomiary dla różnej ilości czytelników (10-100) i
pisarzy (od 1 do 10). W sprawozdaniu proszę narysować 3D wykres czasu w zależności od
liczby wątków i go zinterpretować. Blokowanie drobnoziarniste
1. Zamek (lock) jest przydatny wtedy, gdy operacje
zamykania/otwierania nie mogą być umieszczone w jednej metodzie lub bloku synchronized.
Przykładem jest zakładanie blokady (lock) na elementy struktury danych, np.
listy. Podczas przeglądania listy stosujemy następujący algorytm: 1. zamknij zamek na pierwszym elemencie listy 2. zamknij zamek na drugim elemencie 3. otwórz zamek na pierwszym elemencie 4. zamknij zamek na trzecim elemencie 5. otwórz zamek na drugim elemencie 6. powtarzaj dla kolejnych elementów Dzięki temu unikamy
konieczności blokowania całej listy i wiele wątków może równocześnie
przeglądać i modyfikować różne jej fragmenty. Ćwiczenie
1. Proszę zaimplementować listę, w której każdy węzeł składa się z
wartości typu Object, referencji do następnego węzła oraz zamka (lock). 2. Proszę zastosować metodę drobnoziarnistego blokowania do
następujących metod listy: boolean contains(Object o); //czy lista zawiera element o boolean remove(Object o); //usuwa pierwsze wystąpienie elementu o boolean add(Object o); //dodaje element o na końcu listy
|