Implementacja symulacji procesów w ciastkarni z samobsługowym sklepem, koncentrująca się na zarządzaniu współbieżnym dostępem do podajników z wypiekami, obsługą klientów oraz koordynacją pracy piekarza i kasjerów.
Ciastkarnia produkuje P różnych wyrobów cukierniczych (P > 10), każdy w innej cenie:
- Produkty trafiają do sprzedaży w samodzielnych podajnikach w sklepie.
- Każdy podajnik ma ograniczoną pojemność Ki.
- Produkty są pobierane przez klientów w kolejności FIFO (pierwsze wsadzone → pierwsze pobrane).
- Piekarz: produkuje losową liczbę sztuk różnych wyrobów i dokładnie wkłada je na podajniki.
- Klienci: przychodzą losowo, mają listę zakupów (co najmniej 2 różne produkty).
- Pobieranie produktów: jeśli podajnik jest pusty, klient nie kupuje danego produktu.
- Kasy: klienci udają się do jednej z kas, która wystawia paragon i zapisuje liczbę sprzedanych produktów.
-
Pojemność podajników: każdy podajnik może przechowywać maksymalnie Ki sztuk.
-
Limit klientów w sklepie: maksymalnie N osób. Reszta czeka na zewnątrz.
-
Stanowiska kasowe: 2 kasy, zawsze działa co najmniej 1.
- Na każde K = N/2 klientów powinna przypadać co najmniej 1 czynna kasa.
- Jeśli liczba klientów < N/2 → jedna kasa zostaje zamknięta (klienci w kolejce muszą zostać obsłużeni).
Procesy w ciastkarni są sterowane przez Kierownika, który wysyła sygnały:
| Polecenie | Odbiorca | Efekt |
|---|---|---|
| sygnał1 | Klienci i kasy | Inwentaryzacja: klienci kontynuują zakupy, po zamknięciu sklepu raporty sprzedaży są zapisane do pliku |
| sygnał2 | Klienci | Ewakuacja: klienci natychmiast opuszczają sklep, porzucone produkty trafiają do kosza przy kasach |
| zamknięcie sklepu | Piekarz, kasy | Zatrzymanie produkcji i sprzedaży, generowanie raportów końcowych |
| raport | Kierownik | Zapis do pliku stanu sprzedaży, stanu podajników i produkcji piekarza |
- Kierownik (Manager): wysyła sygnały sterujące, zbiera raporty od kas i piekarza, generuje raport końcowy.
- Piekarz (Baker): produkuje losową liczbę sztuk produktów co określony czas i wkłada je na podajniki (FIFO).
- Kasjer (Cashier): obsługuje klientów z kolejki, wystawia paragony, zapisuje sprzedane ilości produktów.
- Klienci (Clients): losowo przychodzą, pobierają produkty z podajników, udają się do kasy, reagują na sygnały Kierownika.
Raport z symulacji należy zapisać w plikach tekstowych:
- report_kasy_X.txt: sprzedane sztuki produktów i kwoty.
- report_piekarz.txt: wyprodukowane sztuki każdego produktu.
- report_podajniki.txt: końcowy stan podajników.
- report_glowny.txt: zestawienie końcowe przygotowane przez Kierownika, sumy sprzedaży, produkcji i stan magazynowy.
- log_symulacji.txt: log zdarzeń w kolejności czasowej (produkowanie, wejścia/wyjścia klientów, otwarcie/zamknięcie kas, sygnały kierownika).
- Mutex/Lock: ochrona stanu podajników i liczby klientów.
- Semafory / Condition variables: ograniczenie liczby klientów w sklepie, kontrola dostępności miejsca na podajnikach.
- Kolejki thread-safe: dla obsługi kolejki klientów do kas.
- Flag/Event: implementacja sygnałów kierownika (sygnał1 i sygnał2).