class ThreadSafe::AtomicReferenceCacheBackend::Node

def try_await_lock(table, i)

+cheap_synchronize+ lock and perform a +cheap_broadcast+.
CAS from non-waiting +LOCKED+ state), unlockers acquire the
detecting that +WAITING+ has been set when unlocking lock (via a failed
The corresponding signalling operation is performed within callers: Upon

available upon exit, which enables these simple single-wait mechanics.
still set. It is OK for this method to return even if lock is not
and then sets +WAITING+ bits on hash field and blocks (once) if they are
Spins a while if +LOCKED+ bit set and this node is the first of its bin,
def try_await_lock(table, i)
  if table && i >= 0 && i < table.size # bounds check, TODO: why are we bounds checking?
    spins = SPIN_LOCK_ATTEMPTS
    randomizer = base_randomizer = Util::XorShiftRandom.get
    while equal?(table.volatile_get(i)) && self.class.locked_hash?(my_hash = hash)
      if spins >= 0
        if (randomizer = (randomizer >> 1)).even? # spin at random
          if (spins -= 1) == 0
            Thread.pass # yield before blocking
          else
            randomizer = base_randomizer = Util::XorShiftRandom.xorshift(base_randomizer) if randomizer.zero?
          end
        end
      elsif cas_hash(my_hash, my_hash | WAITING)
        force_aquire_lock(table, i)
        break
      end
    end
  end
end