Problem synchrozniacji programu

0

Witam, w ramach projektu muszę wykonać program współbieżny w Javie symulujący przeszukiwanie kibiców w bramkach na mecz piłkarski.
Założenia są takie, że

  • jest K kibiców
  • są 3 bramki do przeszukiwania
  • w każdej z trzech tych bramek może być jednocześnie 3 kibiców
  • nie może dojść do sytuacji, że w jednej bramce będą kibice tego samego klubu
  • jeden kibic może przepuścić co najwyżej 5 kibiców (np. sytuacja kibic(czerwonej druzyny), 2 bramki zapełnione są kibicami zespołu czerwonego, a w 3 bramce jest 1 kibic zielonych (powoduje to właśnie przepuszczanie kibiców zielonych jezeli są za nim bo oni mogą wejsc do bramki 3).
    To wszystko musi być zobrazowane w JavaFX.
    Póki co jestem na etapie rzeźbienia i próbowania.
    Jak byście rozwiązali ten problem?
    Każdy kibic jest wątkiem? Sekcją krytyczną jest wejście i wyjście z bramek? Każda bramka jest wątkiem ? Dodatkowe wątki kontrolujące 'bufor przepuszczania'?
    Z góry dziękuje za Wasze pomysły na rozwiązanie tego zadania.
0

Jak kibicom ma być przydzielana drużyna? Random?

nie może dojść do sytuacji, że w jednej bramce będą kibice tego samego klubu

Czyli z tego by wynikało, że de facto w bramce będzie zawsze max 2 kibiców a nie 3, dodatkowo to też się kłóci z powyższym:

(np. sytuacja kibic(czerwonej druzyny), 2 bramki zapełnione są kibicami zespołu czerwonego, a w 3 bramce jest 1 kibic zielonych (powoduje to właśnie przepuszczanie kibiców zielonych jezeli są za nim bo oni mogą wejsc do bramki 3).

Dlaczego miałby przepuszczać? Przecież może wejść do bramki, bo będzie miała stan zielony-czerwony, czyli dozowolony.

0

Wkradł się mały błąd... W bramce nie mogą być kibice z dwóch różnych klubów. Czyli w jednym momencie nie może być w bramce zielony i czerwony jednoczenie.

1
M K napisał(a):

Wkradł się mały błąd... W bramce nie mogą być kibice z dwóch różnych klubów. Czyli w jednym momencie nie może być w bramce zielony i czerwony jednoczenie.

W takim razie jeżeli zakładamy, że kibice są uprzejmi i zawsze przepuszczają innych, gdy nie mogą wejść do żadnej bramki, to może wyjść sytuacja, gdzie na początku do wszystkich 3 bramek wejdzie po jednym kibicu czerwonych i wszyscy zieloni będą zawsze przepuszczać innych czerwonych - w efekcie na stadion wejdą najpierw wszyscy czerwoni a dopiero potem zaczną wchodzić zieloni :)

Anyway - myślę, że pierwszym dobrym krokiem może być identyfikacja "aktorów" w tym procesie i zamodelowania ich jako wątki. Aktorami może być kibic i operator bramki - do tego zamodelować dwie struktury danych: kolejka kibiców i bramka, które po prostu trzymają stan. Następnie można sobie wypisać z grubsza co każdy z aktorów będzie robił.

Kibic:
[1] wejdź do kolejki
[2] czekaj aż będziesz na czele kolejki
[3] spróbuj wejść do każdej z bramek, jak się nie da - przepuść ludzi i wróć do [2]
[4] wejdź do bramki i usuń się z kolejki
[5] poczekaj aż zostaniesz "przetworzony" w bramce
[6] koniec

Operator bramki:
[1] poczekaj aż bramka będzie niepusta
[2] obsłuż kibica i usuń go z bramki, idź do [1]

Potem przypatrujesz się każdemu z punktów i oceniasz jakie warunki muszą zaistnieć, żeby można było iść dalej, modelujesz je jako java.util.concurrent.locks.Condition i zastanawiasz się kiedy mają być one osiągane.

1 użytkowników online, w tym zalogowanych: 0, gości: 1