Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • benchmark/creation/JavaThread.java

    rbe53b87 rbf71cfd  
    11public class JavaThread {
    2         // Simplistic low-quality Marsaglia Shift-XOR pseudo-random number generator.
    3         // Bijective   
    4         // Cycle length for non-zero values is 4G-1.
    5         // 0 is absorbing and should be avoided -- fixed point.
    6         // The returned value is typically masked to produce a positive value.
    7         static volatile int Ticket = 0 ;
    8 
    9         private static int nextRandom (int x) {
    10                 if (x == 0) {
    11                         // reseed the PRNG
    12                         // Ticket is accessed infrequently and does not constitute a coherence hot-spot.
    13                         // Note that we use a non-atomic racy increment -- the race is rare and benign.
    14                         // If the race is a concern switch to an AtomicInteger. 
    15                         // In addition accesses to the RW volatile global "Ticket"  variable are not
    16                         // (readily) predictable at compile-time so the JIT will not be able to elide
    17                         // nextRandom() invocations. 
    18                         x = ++Ticket ;
    19                         if (x == 0) x = 1 ;
    20                 }
    21                 x ^= x << 6;
    22                 x ^= x >>> 21;
    23                 x ^= x << 7;
    24                 return x ;   
    25         }
    26         static int x = 2;
    27 
    28         static private final int NoOfTimes = Integer.parseInt("10000") ;
    29 
    302        public static class MyThread extends Thread {
    313                @Override
    324                public void run() {}
    335        }
    34         public static void helper() throws InterruptedException {
     6
     7        public static void main(String[] args) throws InterruptedException {
     8                int NoOfTimes = 50000;
     9                long start = System.nanoTime();
    3510                for(int i = 1; i <= NoOfTimes; i += 1) {
    36                         MyThread m = new MyThread();
    37                         x = nextRandom( x );
    38                         m.start();
     11                        JavaThread.MyThread m = new JavaThread.MyThread();
     12                        m.start();
    3913                        m.join();
    4014                }
    41         }
    42         public static void InnerMain() throws InterruptedException {
    43                 long start = System.nanoTime();
    44                 helper();
    4515                long end = System.nanoTime();
    46                 System.out.println( (end - start) / NoOfTimes );
    47         }
    48         public static void main(String[] args) throws InterruptedException {
    49                 for (int n = Integer.parseInt("5"); --n >= 0 ; ) {
    50                         InnerMain();
    51                         Thread.sleep(2000);     // 2 seconds
    52                         x = nextRandom(x);
    53                 }
    54                 if ( x == 0 ) System.out.println(x);
     16                System.out.println( (end - start) / NoOfTimes);
    5517        }
    5618}
Note: See TracChangeset for help on using the changeset viewer.