n pisarzy i k czytelników próbuje otrzymać dostęp do wspólnego zasobu - biblioteki. W bibliotece może znajdować się maksymalnie m czytelników jednocześnie. Każdy pisarz potrzebuje dostępu do biblioteki na wyłączność, czyli nikt inny nie może przebywać razem z nim w bibliotece. Problem polega na takim przydzielaniu dostępu poszczególnym osobom, aby każda zainteresowana mogła po pewnym czasie otrzymać dostęp do biblioteki zgodnie z powyższymi zasadami.
java -jar nazwa_pliku.jar <ilość pisarzy> <ilość czytelników>
Program implementuje rozwiązanie problemu przy pomocy semaforów i kolejki kolejnych osób.
Każda osoba może być albo czytelnikiem, albo pisarzem. W zależności od jej roli może zażądać wyłącznego dostępu do biblioteki (jeżeli jest pisarzem) lub czytać razem z innymi (jeżeli jest czytelnikiem).
Gdy osoba zażąda dostępu do biblioteki, to dodaje się ją do kolejki (wspólnej dla pisarzy i czytelników). Wówczas sprawdza się, czy osoba może wejść do biblioteki. W momencie, gdy kolejna osoba z kolejki może wejść do biblioteki, to jest ona usuwana z kolejki i dostaje dostęp do biblioteki.
Po pewnym czasie pisarz lub czytelnik może zakończyć pracę w bibliotece, wtedy ponownie sprawdzane jest, czy kolejna osoba z kolejki może wejść do biblioteki.
Użyto semaforów:
- po jednym na każdego użytkownika biblioteki
- jeden do blokowania bibliotekarza
- jeden do blokowania dostępu do biblioteki
Program przechwytuje sygnały SIGINT i SIGTERM, dzięki czemu można go bezpiecznie zatrzymać w dowolnym momencie.