Latkoski

Покер synch

Jun 15th, 2016
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.60 KB | None | 0 0
  1. На еден покер турнир има само една маса на која има место за 6 играчи и турнирот се одвива според следните правила:
  2.  
  3. играчите може да седнат на масата само доколку има слободни места
  4. кога ќе се соберат 6 играчи, го викаат дилерот за да подели карти
  5. по делењето, играчите започнуваат да играат покер
  6. откако ќе завршат со играта, секој од играчите чека сите да завршат и излегуваат одеднаш, заедно
  7. нови играчи не смеат да влезат додека не излезат оние што претходно играле
  8. потоа сценариото може да започне од почеток
  9. Вашата задача е да го синхронизирате претходното сценарио.
  10.  
  11. Во почетниот код кој е даден, дефинирана е класа Player, која го симболизира однесувањето на играчите на турнирот. Има повеќе инстанци од класата Player кај кои методот execute() се повикува еднаш.
  12.  
  13. Во имплементацијата, треба да ги користите следните методи од веќе дефинираната променлива state:
  14.  
  15. state.playerSeat()
  16. Го симболизира седнувањето на играчот на масата.
  17. Се повикува од сите играчи.
  18. Доколку се повика кога масата е полна, ќе фрли исклучок.
  19. Доколку се повика пред претходната група да заврши со играта (state.endRound()), ќе фрли исклучок.
  20. state.dealCards()
  21. Го симболизира повикувањето на дилерот и делењето на картите.
  22. Се повикува само од еден играч.
  23. Доколку во моментот на повикот бројот на играчи на масата не е точно 6, ќе фрли исклучок.
  24. state.play()
  25. Го симболизира процесот на играње покер.
  26. Се повикува од сите играчи.
  27. Доколку процесот на играње не се извршува паралелно, ќе добиете порака за грешка.
  28. Доколку картите не се поделени (не завршил state.dealCards() методот), ќе фрли исклучок.
  29. state.endRound()
  30. Означува дека сите играчи завршиле со играњето и може да излезат.
  31. Се повикува само од еден играч.
  32. Доколку во моменот на повикување има играчи кои се' уште не завршиле, ќе фрли исклучок.
  33.  
  34.  
  35.  
  36. package kol2015g1;
  37.  
  38. import java.util.HashSet;
  39. import java.util.concurrent.Semaphore;
  40.  
  41. import problem.ProblemExecution;
  42. import problem.TemplateThread;
  43.  
  44. public class Poker {
  45.  
  46.     public static Semaphore masa;
  47.     public static int brojac;
  48.     public static Semaphore lock;
  49.     public static Semaphore mutex;
  50.     public static Semaphore igraci;
  51.  
  52.     public static void init() {
  53.         masa = new Semaphore(6);
  54.         igraci = new Semaphore(0);
  55.         brojac = 0;
  56.         lock = new Semaphore(1);
  57.  
  58.     }
  59.  
  60.     public static class Player extends TemplateThread {
  61.  
  62.         public Player(int numRuns) {
  63.             super(numRuns);
  64.         }
  65.  
  66.         @Override
  67.         public void execute() throws InterruptedException {
  68.             masa.acquire();
  69.             state.playerSeat();
  70.  
  71.             lock.acquire();
  72.             brojac++;
  73.             if (brojac == 6) {
  74.                 state.dealCards();
  75.                 igraci.release(6);
  76.             }
  77.             lock.release();
  78.  
  79.             igraci.acquire();
  80.             state.play();
  81.  
  82.             lock.acquire();
  83.             brojac--;
  84.             if (brojac == 0) {
  85.                 state.endRound();
  86.                 masa.release(6);
  87.             }
  88.             lock.release();
  89.         }
  90.  
  91.     }
  92.  
  93.     public static void main(String[] args) {
  94.         for (int i = 0; i < 10; i++) {
  95.             run();
  96.         }
  97.     }
  98.  
  99.     static PokerState state = new PokerState();
  100.  
  101.     public static void run() {
  102.         try {
  103.             int numRuns = 1;
  104.             int numIterations = 1200;
  105.  
  106.             HashSet<Thread> threads = new HashSet<Thread>();
  107.  
  108.             for (int i = 0; i < numIterations; i++) {
  109.                 Player c = new Player(numRuns);
  110.                 threads.add(c);
  111.             }
  112.  
  113.             init();
  114.  
  115.             ProblemExecution.start(threads, state);
  116.         } catch (Exception ex) {
  117.             ex.printStackTrace();
  118.         }
  119.     }
  120. }
Advertisement
Add Comment
Please, Sign In to add comment