/*
* This file is part of the Jikes RVM project (http://jikesrvm.org).
*
* This file is licensed to You under the Eclipse Public License (EPL);
* You may not use this file except in compliance with the License. You
* may obtain a copy of the License at
*
* http://www.opensource.org/licenses/eclipse-1.0.php
*
* See the COPYRIGHT.txt file distributed with this work for information
* regarding copyright ownership.
*/
package test.org.jikesrvm.basic.core.threads;
class TestVolatiles extends XThread {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
TestVolatiles tv = new TestVolatiles(i);
tv.start();
}
XThread.say("bye");
XThread.outputMessages();
}
static volatile long vl = 0;
static volatile int vi = 0;
int n;
long l;
TestVolatiles(int i) {
super("V" + i);
n = i;
l = (((long) n) << 32) + n;
}
void performTask() {
int errors = 0;
for (int i = 0; i < 10000000; i++) {
long tl = vl;
vl = l;
int n0 = (int) tl;
int n1 = (int) (tl >> 32);
if (n0 != n1) errors++;
vi = n;
}
tsay(errors + " errors found");
}
}