Teoria współbieżnosci

Laboratorium - Producenci-konsumenci 1


Mechanizmy synchronizacji w Javie

  1. Pakiet Java Concurrency Utilities

  2. Java Concurrent Animated

Problem producentów - konsumentów

  1. Poprawne rozwiązanie klasycznego problemu.
  2. 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

  1. Z. Weiss, T. Gruźlewski, Programowanie współbieżne i rozproszone. WNT, Warszawa 1993.


Bartosz Baliś, balis at agh edu pl