Advertisement
Latkoski

Табланет synch

Jun 15th, 2016
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.86 KB | None | 0 0
  1. package kol2015g1;
  2.  
  3. import problem.ProblemExecution;
  4. import problem.TemplateThread;
  5. import java.util.HashSet;
  6. import java.util.concurrent.Semaphore;
  7.  
  8. public class Tablanet {
  9.  
  10.     public static Semaphore masa;
  11.     public static Semaphore lock;
  12.     public static Semaphore blockPlayer;
  13.     public static Semaphore blockDealer;
  14.     public static int brojac;
  15.     public static Semaphore blockGroup;
  16.     public static int vkupno;
  17.  
  18.     public static void init() {
  19.         masa = new Semaphore(4); // masata kaj so sedvet
  20.         lock = new Semaphore(1); // brojaci ++ --
  21.         blockDealer = new Semaphore(0); // blokiranje na diler metodi
  22.         blockPlayer = new Semaphore(0);// blokiranje na igrac metodi
  23.         blockGroup = new Semaphore(0); //vtor diler blokator
  24.         brojac = 0; // tekovni 4
  25.         vkupno = 0; // vkupno 20 vo eden turnir
  26.  
  27.     }
  28.  
  29.     public static class Dealer extends TemplateThread {
  30.  
  31.         public Dealer(int numRuns) {
  32.             super(numRuns);
  33.         }
  34.  
  35.         @Override
  36.         public void execute() throws InterruptedException {
  37.  
  38.             blockDealer.acquire(); // na pocetok dilerot e blokiran i cekat da e osloboden za da prodolzit nadolu
  39.             state.dealCards(); // delit karti ko ke se oslobodit
  40.             blockPlayer.release(4); // se oslobodvet igracite za da pocnit igrata dolu
  41.  
  42.             blockGroup.acquire(); //  
  43.             state.nextGroup();
  44.             masa.release(4);
  45.         }
  46.     }
  47.  
  48.     public static class Player extends TemplateThread {
  49.  
  50.         public Player(int numRuns) {
  51.             super(numRuns);
  52.         }
  53.  
  54.         @Override
  55.         public void execute() throws InterruptedException {
  56.             masa.acquire(); // idat igrac i sedvit
  57.             state.playerSeat();
  58.  
  59.             lock.acquire(); // zgolemvime brojac
  60.             brojac++;// dosol igrac zgolemvime brojac
  61.  
  62.             if (brojac == 4) { // ko ke e 4 go oslobodvit dilerot gore za da podelit
  63.                 blockDealer.release();
  64.             }
  65.             lock.release();
  66.  
  67.             blockPlayer.acquire(); // se blokiret igracite za da ne igret dur ne se podelet karti
  68.             state.play(); // igret
  69.             lock.acquire(); // se namalvit brojac i se zgolemvit brojot na vkupno vo turnirot
  70.             brojac--;
  71.             vkupno++;
  72.             if (brojac == 0) {
  73.                 blockGroup.release(); // ako zavrsila grupata se oslobodvit vtoriot blok za da stanet i da vlezit nova grupa gore
  74.             }
  75.             if (vkupno == 20) { // ako se 20 zavrsil turnirot i se resetirat brojacot
  76.                 state.endCycle();
  77.                 vkupno = 0;
  78.             }
  79.  
  80.             lock.release();
  81.  
  82.         }
  83.  
  84.     }
  85.  
  86.     public static void main(String[] args) {
  87.         for (int i = 0; i < 10; i++) {
  88.             run();
  89.         }
  90.     }
  91.  
  92.     static TablanetState state = new TablanetState();
  93.  
  94.     public static void run() {
  95.         try {
  96.             int numCycles = 10;
  97.             int numIterations = 20;
  98.  
  99.             HashSet<Thread> threads = new HashSet<Thread>();
  100.  
  101.             Dealer d = new Dealer(50);
  102.             threads.add(d);
  103.             for (int i = 0; i < numIterations; i++) {
  104.                 Player c = new Player(numCycles);
  105.                 threads.add(c);
  106.             }
  107.  
  108.             init();
  109.  
  110.             ProblemExecution.start(threads, state);
  111.         } catch (Exception ex) {
  112.             ex.printStackTrace();
  113.         }
  114.     }
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement