4 * Copyright (c) 2007, The University of Manchester (UK)
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
12 * - Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * - Redistributions in binary form must reproduce the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer in the documentation and/or other materials provided
17 * with the distribution.
18 * - Neither the name of the University of Manchester nor the names
19 * of its contributors may be used to endorse or promote products
20 * derived from this software without specific prior written
23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 /********************************************************************
37 * Ported for our STM implementation
38 * This version copyright(c) University of California, Irvine 2009
39 * @author: Alokika Dash, adash@uci.edu
41 ********************************************************************/
42 public class LeeThread extends Thread {
45 public boolean sampleNow;
46 public boolean doneSample;
47 public long totalLaidTracks;
48 public long myLaidTracks;
65 protected static ThreadLocal<ThreadState> _threadState = new ThreadLocal<ThreadState>() {
66 protected synchronized ThreadState initialValue() {
67 return new ThreadState();
70 static ThreadLocal<Thread> _thread = new ThreadLocal<Thread>() {
71 protected synchronized Thread initialValue() {
78 LeeThread(LeeRouter lt) {
80 tempg = new int[lt.GRID_SIZE][lt.GRID_SIZE][2]; // Lee 2D Grid copy
84 while (!finished && !stop) {
86 //collectMyStatistics();
92 t = lt.getNextTrack();
98 System.out.println("Finished");
99 //collectMyStatistics();
100 //collectStatistics(_threadState.get());
104 //System.out.println("Laying track "+t.nn);
105 lt.layNextTrack(t, tempg);
108 //updateStatistics();
115 protected static void collectStatistics(ThreadState threadState) {
116 // collect statistics
117 //synchronized (lock){
118 totalLaidTracks+=threadState.myLaidTracks;
119 threadState.reset(); // set up for next iteration
123 public void updateStatistics(){
124 _threadState.get().myLaidTracks++;
127 public void collectMyStatistics() {
128 myLaidTracks=_threadState.get().myLaidTracks-myLaidTracks;
132 public void resetMyStatistics() {
139 * Class that holds thread's actual state
141 public class ThreadState {
142 private long myLaidTracks; // number of laid tracks
145 * Creates new ThreadState
147 public ThreadState() {
152 * Resets any metering information (commits/aborts, etc).
154 public void reset() {
155 myLaidTracks = 0; // total number of transactions
160 * @return string representation of thread state
162 public String toString() {
164 "Thread" + hashCode() + "["+
165 "total: " + myLaidTracks + "," +