class Concurrent::ReentrantReadWriteLock

def try_read_lock

Returns:
  • (Boolean) - true if the lock is successfully acquired
def try_read_lock
  if (held = @HeldCount.value) > 0
    if held & READ_LOCK_MASK == 0
      # If we hold a write lock, but not a read lock...
      @Counter.update { |c| c + 1 }
    end
    @HeldCount.value = held + 1
    return true
  else
    c = @Counter.value
    if !waiting_or_running_writer?(c) && @Counter.compare_and_set(c, c+1)
      @HeldCount.value = held + 1
      return true
    end
  end
  false
end