Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package kol2015g1;
- import problem.ProblemExecution;
- import problem.TemplateThread;
- import java.util.HashSet;
- import java.util.concurrent.Semaphore;
- public class Tablanet {
- public static Semaphore masa;
- public static Semaphore lock;
- public static Semaphore blockPlayer;
- public static Semaphore blockDealer;
- public static int brojac;
- public static Semaphore blockGroup;
- public static int vkupno;
- public static void init() {
- masa = new Semaphore(4); // masata kaj so sedvet
- lock = new Semaphore(1); // brojaci ++ --
- blockDealer = new Semaphore(0); // blokiranje na diler metodi
- blockPlayer = new Semaphore(0);// blokiranje na igrac metodi
- blockGroup = new Semaphore(0); //vtor diler blokator
- brojac = 0; // tekovni 4
- vkupno = 0; // vkupno 20 vo eden turnir
- }
- public static class Dealer extends TemplateThread {
- public Dealer(int numRuns) {
- super(numRuns);
- }
- @Override
- public void execute() throws InterruptedException {
- blockDealer.acquire(); // na pocetok dilerot e blokiran i cekat da e osloboden za da prodolzit nadolu
- state.dealCards(); // delit karti ko ke se oslobodit
- blockPlayer.release(4); // se oslobodvet igracite za da pocnit igrata dolu
- blockGroup.acquire(); //
- state.nextGroup();
- masa.release(4);
- }
- }
- public static class Player extends TemplateThread {
- public Player(int numRuns) {
- super(numRuns);
- }
- @Override
- public void execute() throws InterruptedException {
- masa.acquire(); // idat igrac i sedvit
- state.playerSeat();
- lock.acquire(); // zgolemvime brojac
- brojac++;// dosol igrac zgolemvime brojac
- if (brojac == 4) { // ko ke e 4 go oslobodvit dilerot gore za da podelit
- blockDealer.release();
- }
- lock.release();
- blockPlayer.acquire(); // se blokiret igracite za da ne igret dur ne se podelet karti
- state.play(); // igret
- lock.acquire(); // se namalvit brojac i se zgolemvit brojot na vkupno vo turnirot
- brojac--;
- vkupno++;
- if (brojac == 0) {
- blockGroup.release(); // ako zavrsila grupata se oslobodvit vtoriot blok za da stanet i da vlezit nova grupa gore
- }
- if (vkupno == 20) { // ako se 20 zavrsil turnirot i se resetirat brojacot
- state.endCycle();
- vkupno = 0;
- }
- lock.release();
- }
- }
- public static void main(String[] args) {
- for (int i = 0; i < 10; i++) {
- run();
- }
- }
- static TablanetState state = new TablanetState();
- public static void run() {
- try {
- int numCycles = 10;
- int numIterations = 20;
- HashSet<Thread> threads = new HashSet<Thread>();
- Dealer d = new Dealer(50);
- threads.add(d);
- for (int i = 0; i < numIterations; i++) {
- Player c = new Player(numCycles);
- threads.add(c);
- }
- init();
- ProblemExecution.start(threads, state);
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement