1. 25
  1.  

  2. 3

    This section on the symmetry between volatile and synchronized is a jewel.

    This symmetry allows constructing locks:

    int x;
    volatile boolean busyFlag;
    
    while (!compareAndSet(lock.busyFlag, false, true)); // burn for the mutual exclusion Gods
      a = x;
      b = 1;
    lock.busyFlag = false;
    
    1. 1

      There’s an interesting similar line of work formalizing the C++11 memory model which includes a tool to explore possible behaviors (relative to the stress tester here it systematically explores possible behaviors based on a the model).

      Here’s some links for those interested:

      Main Page

      Online explorer (cppmem)