Laboratorium nr 6 - 3/4 czerwca 2014
Sklonuj repozytorium:
https://agata_migalska_pwr@bitbucket.org/agata_migalska_pwr/concurrency.git.
Na podstawie
- The Java Tutorials: Synchronized Methods,
- The Java Tutorials: Intrinsic Locks and Synchronization oraz
- prezentacji z dzisiejszych zajęć
popraw implementację klas
- pl.edu.pwr.synchronization.Counter oraz
- pl.edu.pwr.synchronization.Singleton
tak, żeby obecność wielu wątków nie naruszała poprawności ich działania. Pamiętaj, że synchronizacja jest droga i zastosuj ją tylko tam, gdzie jest niezbędna.
Uruchom klasę pl.edu.pwr.deadlock.Deadlock. Wytłumacz dlaczego nastąpiło zakleszczenie.
Zadanie domowe
Uwaga! Zadanie domowe będzie główną składową oceny z laboratorium.
Ligretto
Założenia
- W grze uczestniczy czterech graczy, w tym nie więcej niż jeden komputer.
- Komputer, jeżeli uczestniczy w grze, może nic nie robić. Dodatkowy plus jeżeli będzie.
- Gra kończy się po jednej rozgrywce.
Poniższy algorytm przedstawiony jest z punktu widzenia jednego gracza. Podczas implementacji należy pamiętać, że gracze grają równocześnie.
Algorytm
- Rozpoczęcie gry
- Użytkownik uruchamia klienta gry.
- Serwer gry dodaje użytkownika do listy graczy.
- Jeżeli liczba graczy jest odpowiednia, program rozpoczyna grę.
- Program tasuje i rozdziela karty pomiędzy graczy.
- Rozgrywka
- Program prezentuje graczom stół i karty wszystkich graczy.
- Gracz wybiera kartę i kupkę na stole.
- Program decyduje czy wybrana przez gracza karta może zostać położona na wskazaną kupkę.
- Koniec gry
- Gra kończy się gdy choć jeden z graczy nie ma już kart na stosie.
- Program przelicza karty na stole i wyświetla wynik gracza.