start of new file
[IRC.git] / Robust / src / Benchmarks / Prefetch / Moldyn / dsm / DebugBarrier.java
1 public class Barrier {
2   int numthreads;
3   int entercount;
4   boolean cleared;
5
6   public Barrier(int n) {
7     //System.printString("Initializing barrier for "+n+" threads.\n");
8     numthreads=n;
9     cleared = false;
10     entercount = 0;
11   }
12
13   public Barrier() {
14   }
15
16   public void reset() {
17     cleared = false;
18     entercount = 0;
19   }
20
21   public static void enterBarrier(Barrier b) {
22     int tmp;
23     boolean retry=true;
24
25     do {
26       atomic {
27         //System.printString("Entering barrier with ec="+b.entercount+" cl="+b.cleared+"\n");
28         if (!b.cleared) {
29           b.entercount++;
30           tmp = b.entercount;
31           if (tmp==b.numthreads) {
32             if(b.numthreads > 1)
33               b.cleared=true;
34             b.entercount--;
35             //System.printString("Exiting Barrier #1\n");
36             return;
37           }
38           retry=false;
39         }
40       }
41     } while(retry);
42     //System.printString("Waiting for last thread to enter\n");
43     while(true) {
44       atomic {
45         if (b.cleared) {
46           b.entercount--;
47           int count = b.entercount;
48           if (count==0)
49             b.cleared=false;
50           //System.printString("Exiting Barrier #2\n");
51           return;
52         }
53       }
54     }
55   }
56 }