Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- На еден покер турнир има само една маса на која има место за 6 играчи и турнирот се одвива според следните правила:
- играчите може да седнат на масата само доколку има слободни места
- кога ќе се соберат 6 играчи, го викаат дилерот за да подели карти
- по делењето, играчите започнуваат да играат покер
- откако ќе завршат со играта, секој од играчите чека сите да завршат и излегуваат одеднаш, заедно
- нови играчи не смеат да влезат додека не излезат оние што претходно играле
- потоа сценариото може да започне од почеток
- Вашата задача е да го синхронизирате претходното сценарио.
- Во почетниот код кој е даден, дефинирана е класа Player, која го симболизира однесувањето на играчите на турнирот. Има повеќе инстанци од класата Player кај кои методот execute() се повикува еднаш.
- Во имплементацијата, треба да ги користите следните методи од веќе дефинираната променлива state:
- state.playerSeat()
- Го симболизира седнувањето на играчот на масата.
- Се повикува од сите играчи.
- Доколку се повика кога масата е полна, ќе фрли исклучок.
- Доколку се повика пред претходната група да заврши со играта (state.endRound()), ќе фрли исклучок.
- state.dealCards()
- Го симболизира повикувањето на дилерот и делењето на картите.
- Се повикува само од еден играч.
- Доколку во моментот на повикот бројот на играчи на масата не е точно 6, ќе фрли исклучок.
- state.play()
- Го симболизира процесот на играње покер.
- Се повикува од сите играчи.
- Доколку процесот на играње не се извршува паралелно, ќе добиете порака за грешка.
- Доколку картите не се поделени (не завршил state.dealCards() методот), ќе фрли исклучок.
- state.endRound()
- Означува дека сите играчи завршиле со играњето и може да излезат.
- Се повикува само од еден играч.
- Доколку во моменот на повикување има играчи кои се' уште не завршиле, ќе фрли исклучок.
- package kol2015g1;
- import java.util.HashSet;
- import java.util.concurrent.Semaphore;
- import problem.ProblemExecution;
- import problem.TemplateThread;
- public class Poker {
- public static Semaphore masa;
- public static int brojac;
- public static Semaphore lock;
- public static Semaphore mutex;
- public static Semaphore igraci;
- public static void init() {
- masa = new Semaphore(6);
- igraci = new Semaphore(0);
- brojac = 0;
- lock = new Semaphore(1);
- }
- public static class Player extends TemplateThread {
- public Player(int numRuns) {
- super(numRuns);
- }
- @Override
- public void execute() throws InterruptedException {
- masa.acquire();
- state.playerSeat();
- lock.acquire();
- brojac++;
- if (brojac == 6) {
- state.dealCards();
- igraci.release(6);
- }
- lock.release();
- igraci.acquire();
- state.play();
- lock.acquire();
- brojac--;
- if (brojac == 0) {
- state.endRound();
- masa.release(6);
- }
- lock.release();
- }
- }
- public static void main(String[] args) {
- for (int i = 0; i < 10; i++) {
- run();
- }
- }
- static PokerState state = new PokerState();
- public static void run() {
- try {
- int numRuns = 1;
- int numIterations = 1200;
- HashSet<Thread> threads = new HashSet<Thread>();
- for (int i = 0; i < numIterations; i++) {
- Player c = new Player(numRuns);
- threads.add(c);
- }
- init();
- ProblemExecution.start(threads, state);
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment