Skip to content
Snippets Groups Projects
SharedRessources.java 2.36 KiB
Newer Older
  • Learn to ignore specific revisions
  • NET-D3v3l0p3r's avatar
    -1-
    NET-D3v3l0p3r committed
    package parallel;
    
    import algorithm.Explorer;
    import algorithm.WorkingExplorers;
    import structs.Vec3;
    
    
    Enes Herguel's avatar
    Enes Herguel committed
    import java.util.Stack;
    
    
    NET-D3v3l0p3r's avatar
    -1-
    NET-D3v3l0p3r committed
    public class SharedRessources {
        private static int USING_CORES;
    
        /***
         * Use Integer.MAX_VALUE for all cores
         * @param cores
         */
        public static void setMaximumCores(int cores) {
    
    Enes Herguel's avatar
    Enes Herguel committed
            if (cores >= Runtime.getRuntime().availableProcessors())
                cores = Runtime.getRuntime().availableProcessors();
    
    NET-D3v3l0p3r's avatar
    -1-
    NET-D3v3l0p3r committed
            USING_CORES = cores;
        }
    
        private static SharedRessources sharedRessources;
    
    
    Enes Herguel's avatar
    Enes Herguel committed
        public static SharedRessources getInstance() {
    
    NET-D3v3l0p3r's avatar
    -1-
    NET-D3v3l0p3r committed
            if (sharedRessources == null)
                sharedRessources = new SharedRessources(USING_CORES);
            return sharedRessources;
        }
    
    
    Enes Herguel's avatar
    Enes Herguel committed
        private SharedRessources(int cores) {
            maxCores = cores;
            System.out.println("[*] Using " + maxCores + " cores.");
    
            signalingObject = new Object();
    
            workingThreads = new WorkingExplorers[maxCores];
            for (int i = 0; i < maxCores; i++) {
                workingThreads[i] = new WorkingExplorers();
                workingThreads[i].start();
            }
    
            currentCore = 0;
        }
    
        private int width;
        private int height;
    
        private boolean[] wallMatrix;
        private Vec3[] visitMatrix;
    
    
    NET-D3v3l0p3r's avatar
    -1-
    NET-D3v3l0p3r committed
        private int maxCores;
        private int currentCore;
    
        private WorkingExplorers[] workingThreads;
    
    
    Enes Herguel's avatar
    Enes Herguel committed
        private Object signalingObject;
    
    
        public Object getSignalingObject() {
            return signalingObject;
    
    NET-D3v3l0p3r's avatar
    -1-
    NET-D3v3l0p3r committed
        }
    
        public void add(Explorer explorer) {
    
    Enes Herguel's avatar
    Enes Herguel committed
            this.workingThreads[(currentCore++) % maxCores].add(explorer);
    
    NET-D3v3l0p3r's avatar
    -1-
    NET-D3v3l0p3r committed
        }
    
        public boolean done() {
            for (int i = 0; i < maxCores; i++)
                if (!this.workingThreads[i].isReady())
                    return false;
            return true;
        }
    
        public Vec3[] getVisitMatrix() {
            return visitMatrix;
        }
    
        public boolean[] getWallMatrix() {
            return wallMatrix;
        }
    
        protected void setVisitMatrix(Vec3[] visitMatrix) {
            this.visitMatrix = visitMatrix;
        }
    
        protected void setWallMatrix(boolean[] wallMatrix) {
            this.wallMatrix = wallMatrix;
        }
    
        public int getWidth() {
            return width;
        }
    
        public int getHeight() {
            return height;
        }
    
        protected void setWidth(int width) {
            this.width = width;
        }
    
        protected void setHeight(int height) {
            this.height = height;
        }
    }