change
authorjihoonl <jihoonl>
Tue, 23 Feb 2010 01:05:19 +0000 (01:05 +0000)
committerjihoonl <jihoonl>
Tue, 23 Feb 2010 01:05:19 +0000 (01:05 +0000)
Robust/src/Benchmarks/Recovery/Game/recovery/Barrier.java
Robust/src/Benchmarks/Recovery/Game/recovery/RainForest.java

index 7178a87d2327b00c84810820c724af6fc50b3cdb..ec63d471994dd4c9ce760fa8754153a153ff1095 100644 (file)
@@ -16,6 +16,7 @@ public class Barrier extends Thread {
    **/
   public void updateAge(GameMap[][] land, int maxage, int rows, int cols) {
     int countTrees = 0;
+    //System.out.println("updateAge -> maxAge : "+maxage + " rows : " + rows + " cols : "+ cols);
     for(int i = 0; i<rows; i++) {
       for(int j = 0; j<cols; j++) {
         if(land[i][j].tree != null) {
@@ -28,7 +29,7 @@ public class Barrier extends Thread {
         }
       }
     }
-    /* Debugging-> System.println("Tree count=  "+countTrees); */
+//    System.println("Tree count=  "+countTrees);
   }
 
   public static void enterBarrier(int threadid, threadinfo[] tinfo, int numthreads) {
@@ -44,13 +45,20 @@ public class Barrier extends Thread {
       }
       boolean check = false;
       atomic {
-        if(tinfo[i].counter >= tinfo[threadid].counter)  {
+        if(tinfo[i].status != -1) {
+          if(tinfo[i].counter >= tinfo[threadid].counter)  {
+            check = true;
+          }
+        } else {
           check = true;
         }
       }
       if(!check) {
         int status = Thread.getStatus(i);
         if(status==-1) {//Thread is dead
+          atomic {
+            tinfo[i].status = -1;
+          }
           //System.out.println("DEBUG -> Dead\n");
           continue;
         }
@@ -61,7 +69,7 @@ public class Barrier extends Thread {
 
         //System.out.println("i= " + i + " i's count= " + y + " threadid= " + threadid + " mycount= " + x);
 
-        while(y!=x) {
+        while(y!=x && (Thread.getStatus(i) != -1)) {
           //Wait for 100 microseconds
           sleep(100);
           atomic {
@@ -76,9 +84,10 @@ public class Barrier extends Thread {
 
 public class threadinfo {
   int counter;
-  int id;
+  int status;
   public threadinfo() {
     counter = 0;
+    status = 0;
   }
 }
 
index cfaf09c7e6fc5df4f0394e0af1cd07751825af4b..79df0e923985ea07a684c8d92467e4d33b5e8de4 100644 (file)
@@ -81,7 +81,7 @@ public class RainForest extends Thread {
     //Do N rounds 
     //do one move per round and synchronise
     for(int i = 0; i<ROUNDS; i++) {
-      System.out.println("iteration= " + i);
+//      System.out.println("iteration= " + i);
       atomic {
         doOneMove(land, gamer);
       }
@@ -93,6 +93,13 @@ public class RainForest extends Thread {
       }
       Barrier.enterBarrier(id,mytinfo,nthreads);
     }
+
+    System.out.println("\n\n\nI'm done\n\n\n");
+
+    while(true) {
+      sleep(300000);
+    }
+
   }
 
   public static void main(String[] args) {