package rttm.tests; import rttm.atomic; import rttm.Diagnostics; import com.jopdesign.io.IOFactory; import com.jopdesign.io.SysDevice; import com.jopdesign.sys.Startup; public class IncDecTest implements Runnable { static SysDevice sys = IOFactory.getFactory().getSysDevice(); public static void main(String[] args) { SysDevice sys = IOFactory.getFactory().getSysDevice(); for (int i = 1; i < sys.nrCpu; i++) { Runnable r = new IncDecTest(); Startup.setRunnable(r, i-1); } sys.signal = 1; new IncDecTest().run(); System.out.println(cnt); System.out.println(cnt); Diagnostics.stat(); System.out.println(cnt); } protected IncDecTest() { } static volatile int cnt = 0; static final int ITERATIONS = 100000; static final int INCREMENTS = 10; public void run() { if ((sys.cpuId % 2) == 0) { for (int i = 0; i < ITERATIONS; i++) { if ((increment() % INCREMENTS) != 0) { throw new RuntimeException(); } } } else { for (int i = 0; i < ITERATIONS; i++) { if ((decrement() % INCREMENTS) != 0) { throw new RuntimeException(); } } } Diagnostics.saveStatistics(); } @atomic protected int increment() { int result = cnt; for (int i = 0; i < INCREMENTS; i++) { cnt++; } return result; } @atomic protected int decrement() { int result = cnt; for (int i = 0; i < INCREMENTS; i++) { cnt--; } return result; } }