Teoria współbieżnosci
Laboratorium - Producenci-konsumenci 1
Mechanizmy synchronizacji w Javie
- Pakiet Java Concurrency Utilities
- Java Concurrent Animated
Problem producentów - konsumentów
- Poprawne rozwiązanie klasycznego problemu.
- Implementacja ograniczonego bufora z wykorzystaniem mechanizmu zamków i zmiennych warunkowych.
Zadanie - producenci i konsumenci z losową liczbą pobieranych i wstawianych porcji
- Bufor może pomieścić 2M nierozróżnialnych elementów
- Jest wielu producentów i konsumentów
- Producent wstawia do bufora losową liczbę elementów (nie więcej niż M)
- Konsument pobiera losową liczbę elementów (nie więcej niż M)
Zaimplementować rozwiązanie z losową liczbą porcji w wariancie
naiwnym. W programie istnieje współdzielony bufor o wielkości M i działa N producentów i konsumentów, z których każdy ma przypisaną pewną stałą wielkość porcji, np. od 1 do floor(M/2). Przykładowa konfiguracja:
- Wielkość bufora M=16384
- 8 konsumentów z wielkościami porcji 1, 2, 4, 8, 16, ... , 8192
- Analogicznie 8 producentów
Każdy producent i konsument działa z tą samą prędkością, tzn. produkuje/konsumuje elementy w tym samym tempie (najlepiej bez żadnych sleepów).Producenci i konsumenci są wstrzymywani gdy w buforze nie ma wystarczającej liczby elementów / ilości miejsca.
Przerwij działanie wątków producentów i konsumentów po jakimś ustalonym czasie (kilka minut) i wypisz histogram pokazujący liczbę dostępów do bufora w zalezności od wielkości porcji, osobno dla producentów i konsumentów.
Bibliografia
- Z. Weiss, T. Gruźlewski, Programowanie współbieżne i rozproszone. WNT, Warszawa 1993.
Bartosz Baliś, balis at agh edu pl