ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/loops/TorusSpanningTree.java
(Generate patch)

Comparing jsr166/src/test/loops/TorusSpanningTree.java (file contents):
Revision 1.6 by dl, Sun Sep 19 12:55:37 2010 UTC vs.
Revision 1.9 by dl, Sat Sep 12 20:24:33 2015 UTC

# Line 1 | Line 1
1   /*
2   * Written by Doug Lea with assistance from members of JCP JSR-166
3   * Expert Group and released to the public domain, as explained at
4 < * http://creativecommons.org/licenses/publicdomain
4 > * http://creativecommons.org/publicdomain/zero/1.0/
5   */
6  
7   //import jsr166y.*;
# Line 57 | Line 57 | public class TorusSpanningTree {
57                  pool.invoke(new Driver(root));
58                  long elapsed = System.nanoTime() - start;
59                  double nanosPerEdge = (double) elapsed / (4 * n);
60 <                System.out.printf(" %7.2f", nanosPerEdge);
60 >                System.out.printf(" %7.2f", nanosPerEdge);
61                  if (!checked) {
62                      checked = true;
63                      checkSpanningTree(graph, root);
64                  }
65                  pool.invoke(new Resetter(graph, 0, graph.length));
66              }
67 +            graph = null;
68              System.out.println();
69          }
70          System.out.println(pool);
# Line 74 | Line 75 | public class TorusSpanningTree {
75          final Node[] neighbors;
76          Node parent;
77          Node next;
77        volatile int mark;
78  
79          Node(Node[] nbrs) {
80              neighbors = nbrs;
81              parent = this;
82          }
83  
84        static final AtomicIntegerFieldUpdater<Node> markUpdater =
85            AtomicIntegerFieldUpdater.newUpdater(Node.class, "mark");
86
87        boolean tryMark() {
88            return mark == 0 && markUpdater.compareAndSet(this, 0, 1);
89        }
90        void setMark() { mark = 1; }
91
84          /*
85           * Traverse the list ("oldList") embedded across .next fields,
86           * starting at this node, placing newly discovered neighboring
# Line 117 | Line 109 | public class TorusSpanningTree {
109                  int nedges = edges.length;
110                  for (int k = 0; k < nedges; ++k) {
111                      Node e = edges[k];
112 <                    if (e != null && e.tryMark()) {
112 >                    if (e != null &&
113 >                        e.compareAndSetForkJoinTaskTag((short)0, (short)1)) {
114                          e.parent = par;
115                          e.next = newList;
116                          newList = e;
# Line 155 | Line 148 | public class TorusSpanningTree {
148              reinitialize();
149              parent = this;
150              next = null;
158            mark = 0;
151          }
152  
153      }
# Line 166 | Line 158 | public class TorusSpanningTree {
158              this.root = root;
159          }
160          public void compute() {
161 <            root.setMark();
161 >            root.setForkJoinTaskTag((short)1);
162              root.fork();
163              helpQuiesce();
164          }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines