add our barrier
authorbdemsky <bdemsky>
Fri, 25 Apr 2008 08:39:32 +0000 (08:39 +0000)
committerbdemsky <bdemsky>
Fri, 25 Apr 2008 08:39:32 +0000 (08:39 +0000)
Robust/src/Benchmarks/Prefetch/Moldyn/dsm/Barrier.java [new file with mode: 0644]

diff --git a/Robust/src/Benchmarks/Prefetch/Moldyn/dsm/Barrier.java b/Robust/src/Benchmarks/Prefetch/Moldyn/dsm/Barrier.java
new file mode 100644 (file)
index 0000000..482b695
--- /dev/null
@@ -0,0 +1,52 @@
+public class Barrier {
+  int numthreads;
+  int entercount;
+  boolean cleared;
+
+  public Barrier(int n) {
+    numthreads=n;
+    cleared = false;
+    entercount = 0;
+  }
+
+  public Barrier() {
+  }
+
+  public void reset() {
+    cleared = false;
+    entercount = 0;
+  }
+
+  public static void enterBarrier(Barrier b) {
+    int tmp;
+    boolean retry=true;
+
+    do {
+      atomic {
+        if (!b.cleared) {
+          b.entercount++;
+          tmp = b.entercount;
+          if (tmp==b.numthreads) {
+            if(b.numthreads > 1)
+              b.cleared=true;
+            b.entercount--;
+            return;
+          }
+          retry=false;
+        }
+      }
+    } while(retry);
+
+    while(true) {
+      atomic {
+        if (b.cleared) {
+          b.entercount--;
+          int count = b.entercount;
+          if (count==0)
+            b.cleared=false;
+          return;
+        }
+      }
+    }
+  }
+}