From f81d2fb1fcd83d21f8d4adeb956db3702557c758 Mon Sep 17 00:00:00 2001
From: NET-D3v3l0p3r <3r0rxx@gmail.com>
Date: Thu, 22 Apr 2021 17:57:28 +0200
Subject: [PATCH] Seltsames Verhalten: 1 Kern schneller als 4 Kern mit Queue, 4
 Kern schneller als 1 Kern mit Stack...

---
 src/algorithm/Explorer.java           |  2 +-
 src/algorithm/ParallelPathfinder.java | 24 ++++++++++++++++-----
 src/algorithm/WorkingExplorers.java   | 31 +++++++++++++++++++++------
 src/parallel/SharedRessources.java    | 20 +++++++++++++++++
 src/window/MainWindow.java            |  7 ++++--
 5 files changed, 69 insertions(+), 15 deletions(-)

diff --git a/src/algorithm/Explorer.java b/src/algorithm/Explorer.java
index 102ba6d..7e9fe2c 100644
--- a/src/algorithm/Explorer.java
+++ b/src/algorithm/Explorer.java
@@ -39,7 +39,7 @@ public class Explorer {
                 (int) SharedRessources.getInstance().getVisitMatrix()[index]
                         .getZ();
 
-        if (currentStepsOnField <= steps) {
+        if (currentStepsOnField <= steps + SharedRessources.getEpsilon()) {
             return;
         }
 
diff --git a/src/algorithm/ParallelPathfinder.java b/src/algorithm/ParallelPathfinder.java
index 0511c78..217e09a 100644
--- a/src/algorithm/ParallelPathfinder.java
+++ b/src/algorithm/ParallelPathfinder.java
@@ -68,10 +68,7 @@ public class ParallelPathfinder {
             x += dx;
             y += dy;
         }
-
-
         return path;
-
     }
 
     public void draw(Graphics g) {
@@ -81,11 +78,28 @@ public class ParallelPathfinder {
                         SharedRessources.getInstance().getWallMatrix()[i + j * SharedRessources.getInstance().getWidth()];
                 if (b) {
                     g.setColor(Color.blue);
+
+                } else {
+                    Vec3 currentVec
+                            =
+                            SharedRessources.getInstance().getVisitMatrix()[i + j * SharedRessources.getInstance().getWidth()];
+                    if (currentVec.getX() == 0 && currentVec.getY() == 0)
+                        g.setColor(Color.black);
+                    else {
+                        int green = (int) currentVec.getZ();
+                        if (green >= 255)
+                            green = 255;
+
+                        Color color
+                                = new Color(0, green, 0);
+
+                        g.setColor(color);
+
+                    }
+
                     g.fillRect(i * 1, j * 1, 1, 1);
                 }
             }
         }
     }
-
-
 }
diff --git a/src/algorithm/WorkingExplorers.java b/src/algorithm/WorkingExplorers.java
index edf895d..8b6ad68 100644
--- a/src/algorithm/WorkingExplorers.java
+++ b/src/algorithm/WorkingExplorers.java
@@ -10,14 +10,19 @@ import java.util.concurrent.LinkedBlockingQueue;
 
 public class WorkingExplorers extends EagerWorkingThread {
 
+    private Collection<Explorer> currentWaitingExplorers;
+
     public WorkingExplorers() {
         super();
         this.startListen();
         System.out.println("[*] Thread initialized @" + this.getName());
 
-    }
+        if (SharedRessources.isUsingQueue())
+            currentWaitingExplorers
+                    = new ConcurrentLinkedQueue<>();
+        else currentWaitingExplorers = new Stack<Explorer>();
 
-    private ConcurrentLinkedQueue<Explorer> currentWaitingExplorers = new ConcurrentLinkedQueue<Explorer>(); // suited for maze only!!!
+    }
 
     @Override
     public void onBegin() {
@@ -25,21 +30,33 @@ public class WorkingExplorers extends EagerWorkingThread {
 
     @Override
     public void onTrigger() {
-        if (!currentWaitingExplorers.isEmpty())
-            currentWaitingExplorers
-                    .poll()
+        if (!currentWaitingExplorers.isEmpty()) {
+
+            if (SharedRessources.isUsingQueue())
+                ((ConcurrentLinkedQueue<Explorer>) currentWaitingExplorers)
+                        .poll()
+                        .explore();
+            else ((Stack<Explorer>) currentWaitingExplorers)
+                    .pop()
                     .explore();
+        }
     }
 
     @Override
     public void onEnd() {
-        synchronized (SharedRessources.getInstance().getSignalingObject()){
+        synchronized (SharedRessources.getInstance().getSignalingObject()) {
             SharedRessources.getInstance().getSignalingObject().notifyAll();
         }
     }
 
     public void add(Explorer explorer) {
-        this.currentWaitingExplorers.offer(explorer);
+
+        if (SharedRessources.isUsingQueue())
+            ((ConcurrentLinkedQueue<Explorer>) currentWaitingExplorers)
+                    .offer(explorer);
+        else ((Stack<Explorer>) currentWaitingExplorers)
+                .push(explorer);
+
         this.trigger();
     }
 
diff --git a/src/parallel/SharedRessources.java b/src/parallel/SharedRessources.java
index 9e99be2..7f115e9 100644
--- a/src/parallel/SharedRessources.java
+++ b/src/parallel/SharedRessources.java
@@ -19,6 +19,26 @@ public class SharedRessources {
         USING_CORES = cores;
     }
 
+    private static int EPSILON;
+
+    public static void setEpsilon(int epsilon) {
+        EPSILON = epsilon;
+    }
+
+    public static int getEpsilon() {
+        return EPSILON;
+    }
+
+    private static boolean USE_QUEUE;
+
+    public static void useQueue(boolean status) {
+        USE_QUEUE = status;
+    }
+
+    public static boolean isUsingQueue() {
+        return USE_QUEUE;
+    }
+
     private static SharedRessources sharedRessources;
 
     public static SharedRessources getInstance() {
diff --git a/src/window/MainWindow.java b/src/window/MainWindow.java
index 97adbb7..3600393 100644
--- a/src/window/MainWindow.java
+++ b/src/window/MainWindow.java
@@ -23,7 +23,10 @@ public class MainWindow extends Game {
 
     @Override
     public void loadGame() {
-        SharedRessources.setMaximumCores(Integer.MAX_VALUE);
+        SharedRessources.setMaximumCores(1);
+        SharedRessources.setEpsilon(0);
+        SharedRessources.useQueue(true);
+
         try {
             // MAZE GENERATED WITH http://www.mazegenerator.net/
             MapLoader.getDefault().load(ImageIO.read(new File("examples/maze.png")));
@@ -63,7 +66,7 @@ public class MainWindow extends Game {
 
         g.setColor(Color.red);
         for (var pt : pts) {
-            g.fillRect(pt.x * 1, pt.y * 1, 1, 1);
+            g.fillRect(pt.x - 2, pt.y - 2, 4, 4);
         }
     }
 
-- 
GitLab