code: public boolean attemptMark(V expectedReference, boolean newMark) {
          Pair<V> current = pair;
          return
              expectedReference == current.reference &&
              (newMark == current.mark ||
               casPair(current, Pair.of(expectedReference, newMark)));
      }
docs: Atomically sets the value of the mark to the given update value
  if the current reference is {@code ==} to the expected
  reference.  Any given invocation of this operation may fail
  (return {@code false}) spuriously, but repeated invocation
  when the current value holds the expected value and no other
  thread is also attempting to set the value will eventually
  succeed.
  
  @param expectedReference the expected value of the reference
  @param newMark the new value for the mark
  @return {@code true} if successful