docs: @Override
      public boolean flush()
      {
          //  If there are no un-flushed items, do nothing.
          if (w == f) {
              return true;
          }
  
          //  Try to set 'c' to 'f'.
          if (!c.compareAndSet(w, f)) {
              //  Compare-and-swap was unsuccessful because 'c' is NULL.
              //  This means that the reader is asleep. Therefore we don't
              //  care about thread-safeness and update c in non-atomic
              //  manner. We'll return false to let the caller know
              //  that reader is sleeping.
              c.set(f);
              w = f;
              return false;
          }
  
          //  Reader is alive. Nothing special to do now. Just move
          //  the 'first un-flushed item' pointer to 'f'.
          w = f;
          return true;
      }